首页 > 解决方案 > 使用 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

标签: javajboss

解决方案


推荐阅读