2

クライアントと別のアプリケーションの間の中間層として機能する Web サービスを実装しています。Web サービスの要件では、標準の WS-Security を使用して SOAP ヘッダーでユーザー名とパスワードを送信する必要があると述べています。

Web サービスの実装では、メソッド呼び出しを通じて渡された情報を取得し、それをユーザー名とパスワードと組み合わせて他のアプリケーションを呼び出す必要があります。これが私の問題の始まりです。

Web サービス実装内の SOAP ヘッダーからユーザー名とパスワードを取得する簡単な方法がわかりません。注入された WebServiceContext を介してユーザー プリンシパル (ユーザー名) にアクセスできますが、パスワードを取得する簡単な方法がわかりません。

SOAPHeader にアクセスでき、おそらく XML を解析してパスワード要素を取得できますが、これはこの問題を解決するための非常に面倒な方法のようです。

私は JAX-WS と WS-Security について、自分が望んでいるほど詳しくありません。他の誰かにとって明らかな何かが欠けていることを願っています-おそらく、ある種のハンドラーを実装する必要がありますか?

4

1 に答える 1

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
}

これはstandard-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>
于 2010-05-13T18:28:02.847 に答える