24.4.4 javax.ws.rs.core.SecurityContext

javax.ws.rs.core.SecurityContextは,処理中のHTTPリクエストに関連するセキュリティ情報を保持するコンテキストです。

ルートリソースクラスのフィールドにインジェクトされるjavax.ws.rs.core.SecurityContextの使用例を次に示します。

package com.sample.resources;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.SecurityContext;

//ルートリソースクラス
@Path("/root")
public class Resource {
 //Contextアノテーションを使用してSecurityContextをインジェクトするフィールド
 private @Context SecurityContext securityContext;

 //リソースメソッド
 @GET
 public String getValue () {
   String value = "Authentication Scheme: "
       + this.securityContext.getAuthenticationScheme()
       + ", User Principal: " + this.securityContext.getUserPrincipal()
       + ", Is secure: " + this.securityContext.isSecure()
       + ", Is user in role: " + this.securityContext.isUserInRole("admin");

   return value;
 }
}

セキュリティ情報を含むweb.xmlの例を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<web-app ...>
 ...
 <security-constraint>
    <web-resource-collection>
      <web-resource-name>Test Resource</web-resource-name>
      <url-pattern>/*</url-pattern>
      <http-method>GET</http-method>
    </web-resource-collection>
    <auth-constraint>
      <role-name>admin</role-name>
    </auth-constraint>
 </security-constraint>
 <login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>jaxrs_server</realm-name>
 </login-config>
 <security-role>
    <role-name>admin</role-name>
 </security-role>
</web-app>

ルートリソースクラスcom.sample.resources.Resourceを含むWebアプリケーション(WARファイル)のコンテキストルートが"example"で,Webアプリケーションが"sample.com"というホストで公開されているとします。この例で,適切な認証情報を指定したURL"http://sample.com/example/root"に対するHTTP GETリクエストでは,まずsecurityContextフィールドにjavax.ws.rs.core.SecurityContextコンテキストがインジェクトされ,その後HTTP GETリクエストを処理できるgetValue()メソッドが呼び出されます。getValue()メソッドでは,web.xmlの設定と実際の認証情報に基づいてセキュリティ情報が取得されます。