gpt4 book ai didi

java - 如何使用CDI从请求中获取 token ?

转载 作者:行者123 更新时间:2023-12-01 17:24:16 25 4
gpt4 key购买 nike

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

@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);
}

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

@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;
}

这个获取 token 的注入(inject)有什么问题吗?

最佳答案

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

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

requestContext.setProperty(TOKEN_PROPERTY_NAME, token);

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

获取 token
@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;
}

关于java - 如何使用CDI从请求中获取 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61233531/

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