问题描述
我正在尝试在服务中注入 HttpServerRequest
,但它始终为空。
@Slf4j
@ApplicationScoped
public class TokenService {
@Context
HttpServerRequest request;
public SysUser getUser() {
String authorization = request.getHeader("Authorization");
log.info(authorization);
// find user by token
return null;
}
}
@Inject
TokenService tokenService;
之后,我尝试使用 @Context HttpServletRequest request
作为资源中方法参数的一部分。它对我有用。
@GET
@Path("routes")
public Result<Object> routes(@Context HttpServerRequest request) {
tokenService.getUser(request);
return null;
}
public SysUser getUser(HttpServerRequest request) {
String authorization = request.getHeader("Authorization");
log.info(authorization);
// find user by token
return null;
}
但我仍然想在服务中注入 HttpServerRequest
。有人有想法吗?
解决方法
HttpServerRequest
和其他注入 @Context
的对象只能注入 JAX-RS 类(即资源和提供者)。
这些类无法注入到常规 CDI bean 中,因此您需要在通过注入 JAX-RS 资源(或提供者)获取它们后将它们作为方法参数传递