Jersey 在资源中的ContainerRequestFilter中创建的访问对象
如何使Jersey 在资源中的ContainerRequestFilter中创建的访问对象,jersey,Jersey,如何使用户对象可用于资源中的进一步处理 @Priority(Priorities.AUTHENTICATION) public static class ResourceAllowedRequestFilter implements ContainerRequestFilter { private AuthorizationValidation authorizationValidation; public ResourceAllowedRequestFil
用户
对象可用于资源中的进一步处理
@Priority(Priorities.AUTHENTICATION)
public static class ResourceAllowedRequestFilter implements ContainerRequestFilter {
private AuthorizationValidation authorizationValidation;
public ResourceAllowedRequestFilter() {
try {
authorizationValidation = new AuthorizationValidation();
} catch (Exception e) {
}
}
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
if (userHeader == null) {
throw new BadRequestException(Response.status(Status.BAD_REQUEST).build());
} else {
User user = authorizationValidation.isAuthorizationValid(userHeader)
}
}
}
@GET
@Path("/{page}/{limit}")
public Response getBooks() {
Access user object created in ContainerRequestFilter
}
在美国,只有一种方法可以做到这一点,叫做注入——但有多种使用注入的方法 这里有两种方法:
javax.ws.rs.core.SecurityContext
。因此,用户必须实现java.security.Principal
,并使用@Context
将SecurityContext注入到资源中。下面的基本示例@覆盖
公共同步无效筛选器(ContainerRequestContext请求)
抛出IOException{
最终用户=authorizationValidation.isAuthorizationValid(userHeader)
//恳求
request.setSecurityContext(新的MySecurityContext(用户));
//或者简单但不是最好的
request.setSecurityContext(新的SecurityContext(){
@凌驾
公共布尔值isUserInRole(字符串角色){
返回true;//如果需要,请检查角色。。。
}
@凌驾
公共布尔值isSecure(){
返回false;//检查HTTPS
}
@凌驾
公共主体getUserPrincipal(){
return user;//在此处返回您的用户-用户必须实现主体
}
@凌驾
公共字符串getAuthenticationScheme(){
返回null;//。。。
}
}
}
资源
@Context
受保护的SecurityContext SecurityContext;
@得到
@路径(“/{page}/{limit}”)
公众回应{
User=(User)securityContext.getUserPrincipal();
}
祝你有愉快的一天