我一直在寻找解决这个问题的方法,但没有成功。我发现的最新帖子可以追溯到 2010 年。我正在使用带有嵌入式 grizzly 2.2.1 的球衣 1.12。
如果我理解正确,除非我将球衣资源部署在 servlet 容器下,否则我无法在其中注入 HttpServletRequest。有解决方法吗?
使用以下内容:
@Context org.glassfish.grizzly.http.server.Request req
示例用法:
@Path("/example")
public class SomeResource {
@POST
@Consumes("application/x-www-form-urlencoded")
public void someMethod(@Context Request req) {
System.out.println(req.getRemoteAddr());
}
}
在我的例子中,我们有一个独立的 Jersey 集群在 nginx 后面作为负载均衡器运行。因此,解决方法是将远程地址作为请求标头传递,这也可以从 Jersey 轻松访问:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;