[英]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.