JAX-WS機能を使用して開発したWebサービスに対して認証機能を設定したい場合,Webサービスセキュリティ機能が提供するAPIを利用すると,メッセージ内のUsernameToken要素を操作できます。ここでは,UsernameToken要素を操作することで,認証情報を取得または設定する方法を説明します。
Webサービスが受信したメッセージの認証情報は,JAX-WS機能のサポート範囲内でアクセスできるメッセージコンテキストから取得します。手順を次に示します。
これらの手順に従って,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);
・・・
}
}
Webサービスクライアントが送信するメッセージに認証情報を設定したい場合,JAX-WS機能のサポート範囲内のメッセージコンテキストを設定します。手順を次に示します。
これらの手順に従って,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);
・・・
}