我正在尝试为几个简单的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();
}
}或者应该在过滤器上声明它?
发布于 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中使用基本身份验证的身份验证筛选器的示例。
https://stackoverflow.com/questions/60291819
复制相似问题