java - 使用 jboss 5.1 获取真实的客户端 IP 地址
问题描述
我有一个 Web 应用程序,它部署在 jboss 5.1 liferay 中,位于负载均衡器后面,带有 ssl。我喜欢获取用户请求来自的 IP 地址。
我使用这段代码可以正常工作,并提供客户端的真实 IP,例如 10.250.11.108。
String ip = request.getHeader("X-Forwarded-For");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
System.out.println("IP Address : "+ip);
request.getHeader("X-Forwarded-For")包含真正的客户端@ip
但是当我在 chrome 浏览器中有代理时
相同的代码会给我这样的代理的@ip 10.50.50.14,而不是客户端的真实@ip 10.250.11.108。
当我不在 chrome 浏览器中使用代理时,我可以拥有真正的客户端@ip。
所以问题与代理有关。
当我在 tomcat 9 中部署我的应用程序时,相同的代码正在工作。
我认为我应该在 jboss 中添加一些配置以允许读取真正的客户端@ip
解决方案
推荐阅读
- c - 控制可能到达非空函数的末尾。频率
- javascript - 基于年份的Angular Js表格格式
- gitlab - 在同一个存储库中嵌套管道
- python - 基于相关矩阵的csv文件重新排序
- c++ - 如何在 Linux 运行时检查堆栈使用情况?
- flutter - Flutter_Console 每个命令只是冻结并且不返回任何内容
- javascript - 这段 Javascript 代码中的“This”指的是什么?
- wordpress - 没有评论标签自定义 WooCommerce 主题
- c++ - 如何在 C++ 中正确地对多边形进行三角剖分
- python - python错误抑制信号18到win32