2015-01-15 8 views
0

기존 SOAP 웹 서비스에 연결하려고합니다. wsdl을 주었고 Apache Axis2 XMLBeans를 통해 Java 클래스를 만들었습니다.SOAP 메시지에 UsernameToken (WS-Security-Heaser) 추가

하지만 WS-Security-Header를 사용하여 자체 작성 클라이언트가 보내는 메시지를 확장해야합니다. 어떻게해야합니까?

Apache Rampart 프로젝트를 찾았지만 자바 클래스에서 생성 된 메시지를 이러한 헤더로 확장하는 솔루션을 찾을 수 없습니다. 웹 서비스 폴더에 WS 보안을 설정할 수있는 기회 만 찾을 수 있습니다.

답변에 대해 흥분됩니다.

도움 주셔서 감사합니다.

답변

0

내 문제가 해결되었습니다. 내 솔루션을 나와 공유하고 싶습니다. 누군가가 필요로 할 수 있기를 바랍니다.

위에서 말했듯이 Apache Axis2 XMLBeans (http://axis.apache.org/axis2/java/core/docs/quickstartguide.html#clientxmlbeans)를 사용하여 wsdl 파일에서 Java 클래스를 만들었습니다.

<wsse:Security soap:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
    <wsse:UsernameToken wsu:Id="UsernameToken-1" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
     <wsse:Username><YOUR USERNAME></wsse:Username> 
     <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"><YOUR PASSWORD></wsse:Password> 
    </wsse:UsernameToken> 
</wsse:Security> 

내가이 programaticly 해결 :없이

스텁에서 SOAP-방법 (한이를 한

는 그 후 나는 그 같이한다 WS 보안 헤더를 추가하는 데 필요한 callbackHandler를 사용하여), 웹 서비스를 사용하기 위해 호출 할 수 있습니다. 이 방법에서는 _messageContext이라는 변수가 있습니다. 여기서 머리글에 도달 할 수 있습니다. _messageContext.getEnvelope().getHeader()은 SOAPHeader 인스턴스를 반환합니다.

import org.apache.axiom.om.OMAbstractFactory; 
import org.apache.axiom.om.OMAttribute; 
import org.apache.axiom.om.OMElement; 
import org.apache.axiom.om.OMFactory; 
import org.apache.axiom.om.OMNamespace; 

public class HeaderAdder { 

    public static void addSecurityToHeader(
      org.apache.axiom.soap.SOAPHeader header) { 

     OMFactory factory = OMAbstractFactory.getOMFactory(); 

     OMNamespace namespaceWSSE = factory 
       .createOMNamespace(
         "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", 
         "wsse"); 

     OMElement element = factory.createOMElement("Security", namespaceWSSE); 

     OMAttribute attribute = factory.createOMAttribute("mustUnderstand", 
       null, "1"); 

     element.addAttribute(attribute); 

     header.addChild(element); 

     OMElement element2 = factory.createOMElement("UsernameToken", 
       namespaceWSSE); 

     OMNamespace namespaceWSU = factory 
       .createOMNamespace(
         "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", 
         "wsu"); 

     attribute = factory.createOMAttribute("Id", namespaceWSU, 
       "UsernameToken-1"); 

     element2.addAttribute(attribute); 

     element.addChild(element2); 

     OMElement element3 = factory.createOMElement("Username", namespaceWSSE); 

     element3.setText("<YOUR USERNAME>"); 

     OMElement element4 = factory.createOMElement("Password", namespaceWSSE); 

     attribute = factory 
       .createOMAttribute(
         "Type", 
         null, 
         "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"); 

     element4.setText("<YOUR PASSWORD>"); 

     element2.addChild(element3); 
     element2.addChild(element4); 
    } 
} 

그리고 그와

을위한 인증이 근무하고 나는 더 이상 아무 거부-응답가있어이 인스턴스와 I 클래스 HeaderAddery에서 addSecurityToHeader 메소드를 호출.

질문이 있으시면 알려 주시기 바랍니다.

친절에 감사드립니다!