通过 Quarkus 在服务中注入 HttpServerRequest

问题描述

我正在尝试在服务中注入 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 资源(或提供者)获取它们后将它们作为方法参数传递