小编use*_*122的帖子

@RolesAllowed总是在Jersey资源上拒绝(禁止)

我正在尝试根据我通过Jersey/JAX-RS公开的资源的角色设置身份验证.此资源存在于Glassfish实例中,其中基于角色(特别是通过@RolesAllowed)的身份验证当前正在按需运行.我在servlet容器中运行Jersey:

    <servlet-class>
        com.sun.jersey.spi.container.servlet.ServletContainer
    </servlet-class>
Run Code Online (Sandbox Code Playgroud)

并在我的资源上执行基本身份验证; 该要求正在按预期执行.我还为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>
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试实际添加@RolesAllowed注释时,所有访问都会失败.例如:

@Path("/my/resource")
@ManagedBean
@RolesAllowed({"SYSTEM"})
public class Resource {
    // Accesses with credentials for a user that has the SYSTEM role fail!
}
Run Code Online (Sandbox Code Playgroud)

如果我注入安全上下文并调用context.isUserInRole(),则会为所有角色返回false.非常奇怪的是,如果我删除此资源的@RolesAllowed注释,并使用有效凭据发出请求,则此类可以成功访问EJB,这需要用户与我最初尝试测试的角色相同.似乎泽西可能正在使用错误的SecurityContext进行身份验证,或者其他一些.还有其他人经历过这个吗?

java authentication rest jax-rs jersey

3
推荐指数
1
解决办法
1508
查看次数

标签 统计

authentication ×1

java ×1

jax-rs ×1

jersey ×1

rest ×1