我正在尝试根据我通过 Jersey/JAX-RS 公开的资源的角色设置身份验证。此资源存在于 Glassfish 实例中,在该实例中,基于角色的身份验证(特别是通过 @RolesAllowed)当前正在按需要工作。我在 servlet 容器中运行 Jersey:
<servlet-class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
我正在对我的资源执行基本身份验证;该要求正在按预期执行。我还向 Jersey 提供了以下初始化参数:
<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>
但是,当我尝试实际添加 @RolesAllowed 注释时,所有访问都会失败。例如:
@Path("/my/resource")
@ManagedBean
@RolesAllowed({"SYSTEM"})
public class Resource {
// Accesses with credentials for a user that has the SYSTEM role fail!
}
如果我注入一个安全上下文并调用 context.isUserInRole(),它会为所有角色返回 false。非常奇怪的是,如果我删除此资源的 @RolesAllowed 注释,并使用有效凭据发出请求,则此类可以成功访问 EJB,这要求用户处于我最初尝试测试的相同角色。似乎泽西岛可能正在使用错误的 SecurityContext 进行身份验证,或者类似的。有没有其他人经历过这个?