gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 18:20:54 25 4
gpt4 key购买 nike

我正在尝试为一些简单的 RESTful API 开发一个简单的 Jersey 应用程序。我想在 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();
}
}

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

最佳答案

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

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

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

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

关于java - @DeclareRoles 在 Jersey-2 中应该如何使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60291819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com