クライアント側
あなたはHTTP Authorization
ヘッダーを使用するAPIに証明書を送信するために、資格情報を指定しますBasic username:password
の形式で入力します。 username:password文字列は、Base64というエンコードスキームを使用してエンコードする必要があります。ですから、例えばヘッダは次のようなものになります:残りの仕様は、クライアント・サーバ間の通信はステートレスであることを述べたよう
Authorization: Basic d2lraTpwZWRpYQ==
を、あなたはすべてのリクエストに応じて資格情報を使用してヘッダーを含める必要があります。通常は、クライアント側でセッションクッキーを使用してユーザーを識別します。これにより、ユーザーはすべての要求に対して資格情報を入力する必要がなくなります。
サーバー側があなたのジャージーRESTサービス内の資格情報を確認するには、あなたがキャッチし、すべての着信要求をインターセプトする必要があります。 JerseyにはContainerRequestFilters
という概念があります。ジャージContainerRequestFilter
インタフェースを実装し、public ContainerRequest filter(ContainerRequest request)
メソッドをオーバーライドする必要がBasicAuthFilter
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>your.package.BasicAuthFilter</param-value>
</init-param>
参照されるクラス:Tomcatを使用している場合たとえば、あなたはこのようにあなたのweb.xmlにサーブレットの定義の中、このタイプのフィルタを追加することができます。メソッド内には、基本的に次の操作を行います:
- を
- がそれらをデコード要求のAuthorizationヘッダーからBase64エンコードされた資格情報をフェッチ(すなわち使用
javax.xml.bind.DatatypeConverter.parseBase64Binary()
)
- があなたのUserDao(または他のデータソースプロバイダー)を使用資格情報が有効かどうかを確認します。
- 戻り状況コード
401 Unauthorized
検証が失敗した場合throw new WebApplicationException(Status.UNAUTHORIZED)
)
- 資格情報が有効な場合は、単にあなたがthisブログ記事に非常に良い例を見つけることができますそれに
を処理する責任があるジャージーリソースにそれを委任するために、要求を返します。
これ以上フィードバックが必要ですか?そうでなければ、私の答えはあなたに役立ちました。この質問に私の投稿を受け入れるかもしれません。 Greetz :) – benjiman