Hitachi

Cosminexus V11 アプリケーションサーバ Webサービスセキュリティ構築ガイド


3.10.4 認証情報の取得・設定手順

JAX-WS機能を使用して開発したWebサービスに対して認証機能を設定したい場合,Webサービスセキュリティ機能が提供するAPIを利用すると,メッセージ内のUsernameToken要素を操作できます。ここでは,UsernameToken要素を操作することで,認証情報を取得または設定する方法を説明します。

〈この項の構成〉

(1) Webサービス側での認証情報の取得

Webサービスが受信したメッセージの認証情報は,JAX-WS機能のサポート範囲内でアクセスできるメッセージコンテキストから取得します。手順を次に示します。

  1. Webサービス実装クラスでjavax.xml.ws.WebServiceContextクラスのインスタンス変数を宣言します。

  2. 手順1で宣言したインスタンス変数をjavax.annotation.Resourceアノテーションでアノテートします。

  3. Webサービス実装クラスのメソッド内で,手順1で宣言したインスタンス変数のgetMessageContext()メソッドを呼び出します。

  4. 呼び出したgetMessageContext()メソッドの戻り値として,MessageContextインタフェースを取得します。

  5. WSSConstants.WSS_RECV_ELEMENTPROXYをキーとしてMessageContextインタフェースからjava.util.List<WSSElementProxy>クラスのオブジェクトを取得します。

これらの手順に従って,Webサービス実装クラスTestJaxWsImplのメソッドjaxWsTest()でメッセージコンテキストを取得する例を示します。

import javax.annotation.Resource;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;
import com.cosminexus.wss.element.WSSConstants;
・・・
public class TestJaxWsImpl {
    @Resource WebServiceContext wsContext;
    public String jaxWsTest()
        throws UserDefinedException
    {
        ・・・
        MessageContext msgContext = wsContext.getMessageContext();
        Object obj = msgContext.get(WSSConstants.WSS_RECV_ELEMENTPROXY);
        ・・・
   }
}

(2) Webサービスクライアント側での認証情報の設定

Webサービスクライアントが送信するメッセージに認証情報を設定したい場合,JAX-WS機能のサポート範囲内のメッセージコンテキストを設定します。手順を次に示します。

  1. WebサービスクライアントのサービスクラスからSEI(ポート)を取得します。

  2. SEIからgetRequestContext()メソッドを呼び出し,戻り値としてMessageContextインタフェースを取得します。

  3. WSSConstants.WSS_SEND_ELEMENTPROXYをキーとしてMessageContextインタフェースにWSSElementProxyクラスを設定します。

これらの手順に従って,WebサービスクライアントのTestClientクラスを利用してメッセージコンテキストを取得する例を示します。

import java.util.Map;
import javax.xml.ws.BindingProvider;
import com.cosminexus.wss.element.WSSConstants;
import com.cosminexus.wss.element.WSSElementProxy;
import com.cosminexus.wss.element.WSSElementProxyBuilder;
import com.example.sample.TestJaxWs;
import com.example.sample.TestJaxWsService;
・・・
public class TestClient {
    public static void main( String[] args ) {
        ・・・
        TestJaxWsService service = new TestJaxWsService();
        TestJaxWs port = service.getTestJaxWs();
        ・・・
        WSSElementProxyBuilder proxyBuilder = WSSElementProxyBuilder.newInstance();
        WSSElementProxy proxy = proxyBuilder.createWSSElementProxy();
        ・・・
        Map<String, Object> context = ((BindingProvider) port).getRequestContext();
        context.put(WSSConstants.WSS_SEND_ELEMENTPROXY, proxy);
        ・・・
    }