同じホスト上の 2 つの対応する Axis2 Web サービスにアクセスする 2 つのサーブレットがあります。サーブレットの 1 つは読み取り専用で、もう 1 つはデータベースに書き込みます。
各 Axis2 Web サービスは、BASIC 認証を使用します。読み取り専用 Web サービスはシステム アカウントを使用しますが、書き込み Web サービスはユーザーの資格情報 (Web フォームの一部として送信される) を使用します。
私が直面している問題は、secondと呼ばれるサーブレットが常にその Web サービスへの認証に失敗することです。たとえば、サーブレットを介して読み取り専用サービスを照会することはできますが、書き込みサービスを使用しようとすると「401: 認証が必要です」というメッセージが表示されます。最初に書き込みサービスを呼び出すと、読み取り専用サービスを使用しようとすると同じエラーが発生します。
サーブレットで接続の資格情報を設定する方法は次のとおりです。
Stub service = new Stub(serviceUrl);
HttpTransportProperties.Authenticator auth = new HttpTransportProperties.Authenticator();
auth.setUsername(username);
auth.setPassword(password);
auth.setPreemptiveAuthentication(true);
service._getServiceClient().getOptions().setProperty(HTTPConstants.AUTHENTICATE, auth);
読み取り専用サービスにアクセスするサーブレットのコンストラクターには、このコードが含まれています。書き込みサービスにアクセスするサーブレットには、doGet/doPost メソッドにこのコードがあります。
最初に呼び出されたサービスの資格情報がどこかにキャッシュされているようですが、どこにあるのかわかりません。ここで可能な解決策を見ましたが、WSClientConstants.CACHED_HTTP_STATE
定義されている場所が見つかりません。この JIRA の問題のコメントは、それが一部であることを暗示しているようですorg.apache.axis2.transport.http.HTTPConstants
が、そこにはありません。
仕様:
- 軸のバージョン: 1.5.1
- トムキャットのバージョン: 6.0.26
- Java バージョン: 1.6.0_23