有关Java Web应用程序和X-REAL-IP报头的一个问题(A question about j

2019-07-30 20:57发布

我设置了一个客户端一个项目的演示。 在我的服务器我有很多与被下在不同的端口不同服务器上运行不同的技术构建的网站。 我使用nginx的作为所有这些反向代理。 这种特殊的应用程序是用java建(春MVC / BlazeDS的),并下演示的Tomcat 6(可能在生产中太)进行部署。 作为反向代理,使其能够通过在X REAL-IP报头中的原始请求的IP地址时使用的Nginx有一个很好的设置。 我想要做的是建立我的应用程序,或至少tomcat的治疗X-REAL-IP头真正的请求IP地址。 这可能吗?

Answer 1:

这取决于你的意思是“真正的请求IP”的东西。 如果你在谈论从返回的值request.getRemoteAddr()然后是的,这是可能的。
做到这一点的方法是建立一个Servlet过滤器在你的web应用程序,它会拦截所有的URL(或只是您要X-REAL-IP返回的),并有过滤套传入请求到的后代HttpServletRequestWrapper这将覆盖getRemoteAddr()返回X-REAL-IP的价值。



Answer 2:

您可以使用Tomcat的做到这一点RemoteIpValve

<Valve className="org.apache.catalina.valves.RemoteIpValve"
           remoteIpHeader="X-REAL-IP"
           requestAttributesEnabled="true"
           internalProxies="127.0.0.1"  />

这样,当你调用request.getRemoteAddr()这将是提供正确的信息。 顺便说一句,你可能想使用更标准的头,这是X-Forwarded-For



文章来源: A question about java web apps and X-REAL-IP header