【问题标题】:How should @DeclareRoles be used in Jersey-2?在 Jersey-2 中应该如何使用 @DeclareRoles?
【发布时间】:2020-06-03 02:51:25
【问题描述】:

我正在尝试为几个简单的 RESTful API 开发一个简单的球衣应用程序。我想通过我的 API 端点尝试基于角色的证券,但不确定如何?

是否应该像下面这样在 WebService 类上声明注解?

@Slf4j
@Path("/account")
@Autherization
@DeclareRoles("ADMIN", "STUDENT", "TEACHER")
public class AccountService extends SpringApplication {

    private static Logger logger = Logger.getLogger("AuthenticationService");

    @Path("/greet")
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    @PermitAll
    public Response greet(){
        logger.info("Welcome to Tarkshala Scholar Account APIs");
        return getBean(AuthenticationServiceHandler.class).greet();
    }
}

还是应该在过滤器上声明?

【问题讨论】:

  • 你的身份验证怎么样?
  • @PaulSamsotha 为了安全起见,有一个过滤器检查标题。它在标头中找到会话 ID 和用户名,然后从数据库中获取用户详细信息以获取用户角色。此用户角色与存储在注释 @RolesAllowed("ADMIN") 中的值进行比较,您可以在此处找到它 bitbucket.org/snippets/kuldeepiitg/EbGLA4

标签: java rest tomcat glassfish jersey-2.0


【解决方案1】:

所以 Jersey 已经通过其RolesAllowedDynamicFeature 为您处理授权。只需在您的泽西岛注册ResourceConfig。不需要@DeclareRoles,因为这是一种EJB 机制。泽西岛有自己独立的角色处理系统。

幕后发生的事情是有一个ContainerRequestFilter(用@Priority(Priorities.AUTHORIZATION) 注释)检查您的资源方法以查看允许哪些角色,然后它从ContainerRequestContext 获取SecurityContext 并调用在@RolesAllowed 中声明的每个角色的SecurityContext#isUserInRole(String role) 方法(应该有)。如果SecurityContext 没有通过检查,Jersey 会抛出ForbiddenException

话虽如此,您身份验证需要做的是创建一个ContainerRequestFilter(带有@Priority(Priorities.AUTHENTICATION 注释),并在该过滤器中进行身份验证,然后创建一个@987654335 @ 带有供泽西岛检查的所有角色。这种方法分离了关注点;一个用于身份验证的过滤器(我们创建的)和一个用于授权的过滤器(Jersey 为我们提供的。

您可以在this post 中查看使用基本身份验证的身份验证过滤器示例。

【讨论】:

  • 我正在使用基于摘要的身份验证,基本上是一个具有usernamesrolepasswordDigest 的 dynamoDb 表用于检查用户是否合法。如何将其纳入基于 tomcat 的安全领域?
  • 另外,如果我选择过滤器,我是否必须手动调用 isUserInRole(role) 或者在每次资源请求之前在内部自动调用它?截至目前,我正在 @RolesAllowed 注释中查找值并比较过滤器中的角色,然后决定是否授予用户访问特定资源的权限?
  • 除了身份验证和设置 SecurityContext 之外,您无需执行任何操作。花一些时间查看我链接到的代码。您只需要注册 RolesAllowedDynamicFeature。这将注册一个授权过滤器,它接受您的 SecurityContext 并为您调用 isUserInRole。
猜你喜欢
  • 2014-02-05
  • 2017-05-06
  • 1970-01-01
  • 2016-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-07
相关资源
最近更新 更多