私は jersey を使用して安らかな Web サービスを構築しています。承認の目的で、ContainerRequestFilter を実装するクラス AuthorizationFilter を実装しました。次のように、web.xml にこのフィルターを適用しています。
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>filters.AuthorizationFilter</param-value>
</init-param>
私の AuthorizationFilter は、認証の結果に従って、各リクエストの SecurityContext を設定します。
request.setSecurityContext(new Authorizer(webuser));
私のオーソライザーは次のようになります。
public class Authorizer implements SecurityContext {
private WebUser webuser;
private Principal principal;
public Authorizer(final WebUser webuser) {
this.webuser = webuser;
this.principal = new Principal() {
@Override
public String getName() {
return webuser.getUsername();
}
};
}
@Override
public String getAuthenticationScheme() {
return SecurityContext.FORM_AUTH;
}
@Override
public Principal getUserPrincipal() {
return principal;
}
@Override
public boolean isSecure() {
return true;
}
@Override
public boolean isUserInRole(String role) {
return role.equals(webuser.getRole());
}
}
ここで、エンドポイントのメソッドに対して許可されたロールに注釈を付けたいと思います:
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("{id}")
@RolesAllowed({"EMPLOYEE"})
@Override
public Response Retreive(@PathParam("id") int id) {
return super.Retreive(id);
}
しかし、「RolesAllowed は型に解決できません」と表示されます。だから私の質問はです。これを修正する方法とb。私はそれを正しくやっていますか?
前もってありがとうクリス