私は JAX-WS が初めてで、理解できないことがあります。
JAX-WS セキュリティの設定方法に関するチュートリアルはたくさんありますが、ほとんどすべての場合、BindingProvider.USERNAME_PROPERTY と BindingProvider.PASSWORD_PROPERTY はいくつかの .xml ファイルに格納されています (私が信じているコンテナーによって異なります)。それらは「ハードコーディング」されています。あれは。そして、それは私が得られないものです。BindingProvider.USERNAME_PROPERTY および BindingProvider.PASSWORD_PROPERTY をデータベース内のユーザー名およびパスワードと比較して、Web サービス クライアントを認証するにはどうすればよいですか? クライアント側で BindingProvider.USERNAME_PROPERTY と BindingProvider.PASSWORD_PROPERTY を次のように設定してみました。
ShopingCartService scs = new ShopingCartService(wsdlURL, name);
ShopingCart sc = scs.getShopingCartPort();
Map<String, Object> requestContext = ((BindingProvider)sc).getRequestContext();
requestContext.put(BindingProvider.USERNAME_PROPERTY, userName);
requestContext.put(BindingProvider.PASSWORD_PROPERTY, password);
sc.someFunctionCall();
そして、サーバー側で次のように取得します。
@Resource
WebServiceContext wsContext;
@WebMethod
public void someFunctionCall() {
MessageContext mc = wsContext.getMessageContext();
mc.get(BindingProvider.USERNAME_PROPERTY);
mc.get(BindingProvider.PASSWORD_PROPERTY);
}
しかし、私は常にnullを取得します.xmlで何も設定しませんでした.Webサービスは問題なく動作しますが、これらの変数を取得できない:(
Java 1.6、Tomcat 6、およびJAX-WS の両方で実行しています。
データベースからのパスワードを使用してユーザーを認証するためのヘルプは非常に高く評価されています, ありがとう.