首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Jersey-2中应该如何使用@DeclareRoles?

在Jersey-2中应该如何使用@DeclareRoles?
EN

Stack Overflow用户
提问于 2020-02-19 09:41:09
回答 1查看 93关注 0票数 0

我正在尝试为几个简单的RESTful API开发一个简单的jersey应用程序。我想在我的API端点上尝试基于角色的安全性,但不确定如何操作?

注释应该像下面这样在WebService类上声明吗?

代码语言:javascript
复制
@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();
    }
}

或者应该在过滤器上声明它?

EN

回答 1

Stack Overflow用户

发布于 2020-02-24 23:54:53

所以泽西已经通过它的RolesAllowedDynamicFeature为你处理授权了。只要在你的新泽西ResourceConfig上注册就行了。不需要@DeclareRoles,因为它是一种EJB机制。Jersey有自己的独立系统来处理角色。

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

因此,对于身份验证,您需要做是创建一个ContainerRequestFilter (用@Priority(Priorities.AUTHENTICATION注释),并在过滤器中执行身份验证,然后创建一个SecurityContext,其中包含要检查的所有角色。此方法分离了关注点;一个用于身份验证的过滤器(由我们创建)和一个用于授权的过滤器(由Jersey为我们提供)。

您可以看到在this post中使用基本身份验证的身份验证筛选器的示例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60291819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档