我有一个 Spring bean,它需要来自请求的信息,但不直接从控制器调用(虽然它可能是 - 但我想在没有它的情况下尝试这个)
基本上,我的 API 通过 thrift 向其他服务发出请求。当它发出请求时,会有这样的服务调用:
authenticationService.authenticate(null, "username", "password");
第一个参数(null
)通常是请求上下文的“占位符”实例。请求上下文包含有关发出请求的用户、发起 IP 等的信息。这样,我可以获得有关原始调用者的所有详细信息,而不会让我的 API 基础架构泄漏到后端。
但是,要做到这一点,我有一个InvocationHandler
拦截对我的服务接口代理进行的方法调用。在该代理处理程序内部,我有一个RequestContextFactory
创建RequestContext
. 在这个工厂内部,我需要从请求中获取信息。特别是SecurityContext
,所以我可以识别拨打电话的用户。
现在,我有:
@Provider
@Component
public class WebRequestContextFactory implements RequestContextFactory {
@Context private ContainerRequest containerRequest;
public RequestContext createRequestContext() {
}
}
不幸的是,containerRequest
总是null
。