2010-05-13 30 views
2

我們正在實現一個Web服務,它將充當客戶端和另一個應用程序之間的中間層。我們對Web服務的要求表明,我們需要使用標準的WS-Security在SOAP頭中發送用戶名和密碼。從Web服務(JAX-WS)內訪問用戶名/密碼?

Web服務實現需要將通過方法調用傳遞的信息與用戶名和密碼結合起來,以便調用其他應用程序,這是我的問題開始的地方。

我找不到一個簡單的方法從我的Web服務實現中的SOAP頭獲取用戶名和密碼。我可以通過注入的WebServiceContext獲取用戶主體(用戶名),但我沒有看到任何簡單的方法來獲取密碼。

我可以到達SOAPHeader並可能解析XML來獲取密碼元素,但這似乎是一個非常混亂的方式來解決這個問題。

我對JAX-WS和WS-Security的認識並不像我想要的那樣。我希望我錯過了對別人顯而易見的東西 - 也許我需要實現某種處理程序?

回答

2

最簡單的方法是通過指定它作爲參數傳遞給您的JAX-WS方法拉從SOAP頭中的用戶名和密碼:

@WebMethod 
public String performAction(@WebParam(name="credentials", header=true) 
          Credentials credentials, 
          @WebParam(name="...").... 

您還可以創建一種SOAPHandler:

public class AuthenticationHandler implements SOAPHandler<SOAPMessageContext> 
{ 
    //Implement appropriate methods here 
} 

這是註冊在標準JAXWS-endpoint-config.xml的:

<jaxws-config xmlns="urn:jboss:jaxws-config:2.0" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:javaee="http://java.sun.com/xml/ns/javaee" 
       xsi:schemaLocation="urn:jboss:jaxws-config:2.0 jaxws-config_2_0.xsd"> 
    <endpoint-config> 
     <config-name>WebService Endpoint</config-name> 
     <pre-handler-chains> 
     <javaee:handler-chain> 
      <javaee:protocol-bindings>##SOAP11_HTTP</javaee:protocol-bindings> 
      <javaee:handler> 
       <javaee:handler-name>AuthHandler</javaee:handler-name> 
       <javaee:handler-class>com.example.AuthenticationHandler</javaee:handler-class> 
      </javaee:handler> 
     </javaee:handler-chain> 
     </pre-handler-chains> 
    </endpoint-config> 
</jaxws-config> 
+0

這看起來很像是我要找的。如果我使用header = true標誌向服務方法添加參數,是否強制使用Web服務的任何客戶端更改其實現,或者是否從客戶端映射了參數而不需要客戶端執行任何操作? – Chad 2010-05-23 03:56:51

相關問題