繁体   English   中英

如何使用 CDI 从请求中获取令牌?

[英]How to use CDI, to get token from request?

我有一个像这样的过滤器,用于验证令牌,我想将此令牌传输到此 class 之外,因为我希望此令牌在另一个 class 中进行查询。

@Override   
public void filter(ContainerRequestContext requestContext) {
    // Get the Authorization header from the request
    String authorizationHeader = requestContext.getHeaderString(HttpHeaders.AUTHORIZATION);
    // Validate the Authorization header
    if (!isTokenBasedAuthentication(authorizationHeader)) {
        abortWithUnauthorized(requestContext);
        return;
    }
    // Extract the token from the Authorization header
    token = authorizationHeader.substring(AUTHENTICATION_SCHEME.length()).trim();
    try {
        // Validate the token
        validateToken(token);
    }

我在另一个 class 中有一个方法,如下所示:我需要令牌在哪里?

@Inject
AuthenticationFilter auth;

@GET 
@Secured
@Path("/books") 
@Produces("application/json")
public List<Book> getBooks() { 
    TypedQuery<Book> query = em.createQuery("SELECT s.books from Student s where s.token = :token", Book.class);
    System.out.println("Token: ------- " + auth.getToken());
    query.setParameter("token",auth.getToken());
    List<Book> resultList = query.getResultList();
    return resultList;      
}

这个注入获取令牌有什么问题?

共享请求范围信息的最佳方式是使用请求属性。

在过滤器上,您可以将令牌存储为请求上下文的属性:

requestContext.setProperty(TOKEN_PROPERTY_NAME, token);

请求上下文属性存储为请求的属性,并且可以使用@Context注释将 HttpServletRequest 注入到您的资源中。 因此,您可以使用request.getAttribute获取令牌

@Context
HttpServletRequest request;

@GET 
@Secured
@Path("/books") 
@Produces("application/json")
public List<Book> getBooks() { 
    TypedQuery<Book> query = em.createQuery("SELECT s.books from Student s where s.token = :token", Book.class);

    String token = (String) request.getAttribute(TOKEN_PROPERTY_NAME);

    System.out.println("Token: ------- " + token);
    query.setParameter("token", token);

    List<Book> resultList = query.getResultList();
    return resultList;      
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM