我正在使用 jersey 构建一个宁静的网络服务。出于授权目的,我实现了一个实现 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。我做对了吗?
在此先感谢克里斯