首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从Struts2 2/Servlet中的Apache服务器获取客户端IP地址?

如何从Struts2 2/Servlet中的Apache服务器获取客户端IP地址?
EN

Stack Overflow用户
提问于 2014-02-16 02:12:05
回答 2查看 3.5K关注 0票数 0

我试图在Struts2中获取客户端IP地址。请求通过Apache web服务器路由到Tomcat服务器,两台服务器驻留在同一台物理服务器上。客户端和Apache之间的连接是安全的,但Apache和Tomcat之间的连接不安全。当我试图获取客户端IP地址时,我总是得到127.0.0.1。如何从Apache服务器获取Struts2 2/Servlet中的客户端IP地址?

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-16 04:32:19

您可以在servlet中获得客户机的IP地址-

代码语言:javascript
运行
复制
HttpServletRequest httpServletRequest = (HttpServletRequest) request;

// Proxy
String userIpAddress = httpServletRequest.getHeader("X-Forwarded-For");

if(userIpAddress == null) {
   userIpAddress = request.getRemoteAddr();
}
票数 2
EN

Stack Overflow用户

发布于 2014-02-16 04:48:57

当我试图获取客户端IP地址时,我总是得到127.0.0.1。

这是因为当您在Tomcat中的servlet中看到请求时,Apache前端已经(反向)代理了它,而且Apache <-> Tomcat流量正在环回网络上运行。

解决方案是检查代理添加的标头;例如,请参见@Alexey的答案。

有几件事要注意:

  • HTTP规范没有指定此行为(代理添加标头)。
  • 不同的代理行为不同;例如,它们可能添加不同的标题。
  • 一个请求可以通过多个代理。
  • 一般来说,不能保证代理说的是实话,也不能保证它会透露所有的信息。
  • “最终”客户端IP地址可以是NATed地址.这意味着您将很难识别真正的客户端。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21806403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档