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注入到资源中。下面的基本示例

  • 您还可以构建并注册一个,并将每个请求的用户注入到您的资源中。请访问jersey docs,或搜索@stackoverflow。你会发现很多例子

  • SecurityContext(1)示例:

    ContainerRequestFilter

    @覆盖
    公共同步无效筛选器(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();
    }
    
    祝你有愉快的一天