Mavenプラグイン(org.codehaus.mojo
> axistools-maven-plugin
)+ WSDLファイルを使用してSOAPWebサービスを生成します。
target/generate-source/wsdl2Java/com.comp.projの生成ファイルは次のとおりです:
私のプロジェクトでは、同じ名前のパッケージにFooSoapBindingImpl.Java
を作成し、このJava実装にカスタムコードを追加します。
このWebサービスは、本番環境で使用する準備ができています。
したがって、今日はクライアントに基本認証を追加します(ヘッダー=>承認:基本QWxhZGRpbjpvcGVuIHNlc2FtZQ ==)
Axis Webサービスでこの基本認証にチェックを追加するにはどうすればよいですか?
" Axisセキュリティセクション '発信者の認証' "は次のように述べています。
クライアントは、クライアント証明書またはHTTP基本認証を使用して自分自身を認証できます。
後者は弱すぎて暗号化されていないチャネルでは信頼できませんが、HTTPSで機能します。
MessageContext
クラスは、SOAPメッセージがエンドポイントに投稿されるときに、送信者のユーザー名とパスワードで構成されます。*
ここの例 を参照してください。
適切なゲッターを使用して、これらの値を確認してください。 AxisはまだサーブレットAPI認証関連のものと統合されていないことに注意してください。
この回答のより良い例 を参照してください。
Axis Webサービスでこの基本認証にチェックを追加するにはどうすればよいですか?
Anwser:基本的な資格情報はWebServiceContext
から取得できます
@WebService
public class Service{
//Injected by whatever container you are using
@Resource
WebServiceContext wctx;
@WebMethod
public Integer fooServiceLocator(int x, int y){
//Get The Message Context
MessageContext mctx = wctx.getMessageContext();
//Grab the HTTP Request Headers
Map<Object, Object> object = (Map<Object, Object>) mctx.get(MessageContext.HTTP_REQUEST_HEADERS);
//Grab the Authorization Values
List<String> basicCredentials = (List<String>) object.get("Authorization");
//Print out credentials
basicCredentials.forEach(System.out::println);
//Do a meaningful check of the credentials
上記のコードは、inside Webサービスから基本的な資格情報を取得する方法を説明しています。アプリケーションに必要なセキュリティをサーブレットまたはEJBコンテナのいずれかに処理させることをお勧めします。コンテナにセキュリティを処理させることで、コードは環境間でより移植性が高くなります。
これを行う最も簡単な方法は、認証用にWSDLにSOAPヘッダーを追加することです。たとえば、ユーザー名とパスワードを新しいSOAP WSDLファイルのヘッダーとソースファイルを再生成します。
`<xs:element name="UsernameToken">
<xs:complexType>
<xs:sequence>
<xs:element ref="Username"/>
<xs:element ref="Password" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="Id" type="xs:ID"/>
</xs:complexType></xs:element>`
上記のヘッダーをWSDLで使用して、ソースファイルを生成すると、implで認証ロジックを簡単に追加できます。
次に、ユーザー名とパスワードの検証を* Impl.Javaクラスで実行できます。