Jerseyで@RolesAllowedアノテーションを使った認可の設定
JAX-RSでは、権限のあるユーザのみリソースにアクセスすることを可能にするために、アノテーションによる宣言型の記述とプログラマティックな処理をのためのAPIがあります。アノテーションを使う場合には、特定のロールを持つユーザのみ許可するのであれば、以下のように@RolesAllowedアノテーションでロールを記述します。
@Path("/myResource") @RolesAllowed("admin") public class MyResource { @GET @Path("{id}") @Produces(//...) public String get(@PathParam("id") int id){ // ... } }
実際のロールの確認は、HttpServletRequest#isUserInRole()が呼び出されるので、認証やロールの設定はコンテナで行なっておく必要があります。
今回この設定を試すにあたって引っかかった点としては、コンテナがJavaEE6対応でない場合には(Tomcatなど)、web.xmlに設定を追加しないとアノテーションが処理されません。以下のようにServletのinit-paramにてRolesAllowedResourceFilterFactoryを追加します。
<servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <init-param> <param-name>javax.ws.rs.Application</param-name> <param-value>com.azuki3.sample.jaxrs.config.MyApplication</param-value> </init-param> <init-param> <param-name>com.sun.jersey.spi.container.ResourceFilters</param-name> <param-value>com.sun.jersey.api.container.filter.RolesAllowedResourceFilterFactory </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
参考
RolesAllowedResourceFilterFactory (jersey-bundle 1.11 API)
- 作者: Bill Burke,arton,菅野良二
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/08/23
- メディア: 大型本
- 購入: 28人 クリック: 780回
- この商品を含むブログ (35件) を見る