2014-07-17 2 views
0

이 포럼을 검색하여 그물을 검색했지만 내 문제에 대한 해결책을 찾을 수 없습니다.클라이언트 측에서 웹 서비스 인증을위한 사용자 이름 비밀번호를 보내는 방법

나는 axis1.4의 도움으로 스텁을 생성 한 WSDL 파일을 받았다. 나는 또한 서비스가 요구하는 것과 정확히 같은 XML 응답을 만들었지 만 서비스에 액세스하려고하면 "인증 실패"라고 표시됩니다.

그런 다음 웹 서비스가 사용자 이름 암호로 보호되고 있음을 알게되었습니다.

XML 요청시 사용자 이름 암호를 어떻게 보내야합니까?

아래 코드는 요청을 생성하는 방법입니다.

public class SearcUserFriendlyIsMain { 

/** 
* @param args 
*/ 
Tews6SoapBindingStub stub = null; 
public void init(){ 
    if(null == stub) { 
     try { 

      URL url = null; 
      String endPoint = "http://localhost:1111"; 

      try { 
       url = new URL(endPoint); 
      } catch (MalformedURLException e) {     
       e.printStackTrace(); 
      } 

      stub = new Tews6SoapBindingStub(url, null); 
      stub.setMaintainSession(true); 

     } catch (AxisFault e) { 



      StringBuffer sb = new StringBuffer(); 
      for (StackTraceElement t : e.getStackTrace()) { 
       sb.append("\n").append(t.toString()); 
      } 
      System.out.println("DEBUG"+ sb.toString()); 

     } 
    } 
} 
public static void main(String[] args) { 
    SearcUserFriendlyIsMain tds = new SearcUserFriendlyIsMain(); 
    tds.init(); 
    NYCBSearchUserByFriendlyIdQuery query = new NYCBSearchUserByFriendlyIdQuery(); 
    NYCBSearchUserByFriendlyIdSearch search = new NYCBSearchUserByFriendlyIdSearch(); 
    NYCBSearchUserByFriendlyIdQueryResult res = null; 
    NYCBSearchUserByFriendlyIdSearchFilter filter = new NYCBSearchUserByFriendlyIdSearchFilter(); 
    NYCBSearchUserByFriendlyIdSearchFilter[] filters = {filter}; 
    filter.setOp(OperatorType.EQUALS); 
    filter.setIndex(new BigInteger("1")); 
    filter.setField("USERID"); 
    filter.setValue("junaidaj01"); 
    search.setFilter(filters); 
    NYCBSearchUserByFriendlyIdQueryTaskContext context = new NYCBSearchUserByFriendlyIdQueryTaskContext(); 
    context.setAdmin_id("uid=00000001-0001-0001-0001-0000000ja202,ou=serviceaccounts,dc=test,dc=com"); 
    query.setNYCBSearchUserByFriendlyIdSearch(search); 
    try { 
     res = tds.stub.NYCBSearchUserByFriendlyIdQuery(context,query); 
     System.out.println(res.getImsStatus()); 
    } catch (ImsException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (RemoteException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

} 

답변

0

웹 서비스는 HTTP 기본 인증을 사용하도록 요구하는 경우, 당신은 다음처럼 축 클라이언트 코드를 조정할 수 있습니다 기본 HTTP 인증 사용 :

// to use Basic HTTP Authentication: 
((Stub) service)._setProperty(Call.USERNAME_PROPERTY, "user name"); 
((Stub) service)._setProperty(Call.PASSWORD_PROPERTY, "password"); 

를 SOAP 헤더 요소 추가 때때로 웹 서비스는 로그인 목적으로 SOAP 헤더 정보를 포함하도록 요구합니다. 명시 적 헤더 (WSDL에 정의되어 있음)의 경우 SOAP 헤더 정보는 Axis 클라이언트 코드에서 직접 쓸 수 있어야합니다. 그러나 헤더가 암시 적이면 (WSDL에 정의되지 않은 경우) 수동으로 생성해야합니다.

// add a <UserName> node to the SOAP Header 
((Stub) service).setHeader("urn:thisNamespace", "UserName", "Kuntal Ganguly"); 

이것이 문제를 해결하면 알려주세요.