大家好,感谢您的帮助,
我正在使用JSF开发一个Web应用程序,出于安全考虑,我需要在登录时捕获用户的IP。
我使用以下代码:
HttpServletRequest request=(HttpServletRequest) context.getExternalContext().getRequest();
remoteAddress=request.getRemoteAddr();
问题是,当我检查我的应用程序日志以检查IP地址时,它总是返回127.0.0.1。
[INFO] 07/01/2014 11:04:22 - >用户xxx从127.0.0.1连接
[INFO] 07/01/2014 11:27:43 - >用户xxx从127.0.0.1连接
更多细节:
我在互联网上搜索并阅读了有关使用:
request.getHeader("X-FORWARDED-FOR");
但它并没有解决我的问题。
我现在很迷茫,任何想法为什么会发生这种情况?
答案 0 :(得分:2)
首先,检查您的http服务器是否应转发标头。您正在使用nginx,这应该可以正常工作
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
如果你已经这样做了,你可以使用Tomcat的RemoteIpValve
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="X-Forwarded-For"
requestAttributesEnabled="true"
internalProxies="127.0.0.1" />
这样,当您致电request.getRemoteAddr()
时,它会提供正确的信息。