`

servlet request getHeader("x-forwarded-for") 获取真实IP

    博客分类:
  • Java
阅读更多

在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了 Apache,Nagix等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用 request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或 192.168.1.110,而并不是客户端的真实IP。

经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的 IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端 IP地址和原来客户端请求的服务器地址。

举例来说,当我们访问口碑网首页hangzhou.jsp时,其实并不是我们浏览器真正访问到了服务器上的hangzhou.jsp 文件,而是先由代理服务器Nagix去访问hagnzhou.jsp ,代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问hangzhou.jsp的,所以hangzhou.jsp中通过 request.getRemoteAddr()的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。

<hr/>

获得客户端真实IP地址的方法一:

public String getRemortIP(HttpServletRequest request) {
   if (request.getHeader("x-forwarded-for") == null) {
   return request.getRemoteAddr();
   }
   return request.getHeader("x-forwarded-for");
  }

<hr/>

获得客户端真实IP地址的方法二

 

public String getIpAddr(HttpServletRequest request) {
   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.getRemoteAddr();
   }
   return ip;
  }

 

 

转:http://blog.csdn.net/z69183787/article/details/21187485

分享到:
评论

相关推荐

    获取IP地址和MAC地址

    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....

    获取访问地址中ip

    获取请求头中ip,不同方法:request.getRemoteAddr(),request.getHeader("x-forwarded-for")

    org.apache.commons.lang3.StringUtils.jar

    String ip = request.getHeader("X-Forwarded-For"); if (!StringUtils.isEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)) { //多次反向代理后会有多个ip值,第一个ip才是真实ip int index...

    java request.getHeader("user-agent")获取浏览器信息的方法

    主要介绍了java request.getHeader("user-agent")获取浏览器信息的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    ip-geolocation:IP 到国家_地区的转换助手、https 数据

    getHeader( ' X-Forwarded-For ' ); String ip = getIpFromXForwardedFor(xForwardedFor); String country = IpCountryHelper . getCountry(ip); 版权 db-ip.com 到国家数据库的 IP。 版权所有 :copyright: 2015 db...

    servlet2.4doc

    A FilterChain is an object provided by the servlet container to the developer giving a view into the invocation chain of a filtered request for a resource. FilterConfig - interface javax.servlet....

    jsp获取客户端IP地址的方法

    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

    关于request.getHeader(Referer)的问题探讨

    今天我来分享一下,request.getHeader(“Referer”)获取上次访问的URL链接,在什么情况下他会出现问题! 我在某些页面中,有某几个按钮,分别用来跳转到action.do?method=m 但是,我是用 warpLoaction(”url”);这...

    request.getHeader("referer")防盗链

    HTTP headers是HTTP请求和相应的核心模块,它承载了关于客户端浏览器、请求页面、服务器等相关信息。Referer是HTTP头中的一个属性,告诉服务器我是从哪个页面链接过来的。

    关于request.getHeader(&quot;Referer&quot;)的问题探讨

    request.getHeader("Referer")获取上次访问的URL链接,在什么情况下他会出现问题,下面为大家分享下,感兴趣的朋友不要错过

    java-servlet-api.doc

    Java Servlet API说明文档 绪言 这是一份关于2.1版JavaServletAPI的说明文档,作为对这本文档的补充,你可以到http://java.sun.com/products/servlet/index.html下面下载Javadoc格式的文档。 谁需要读这份文档 这份...

    JSP获取HTTP header信息(request)例子

    JSP获取HTTP header信息(request)例子JSP获取HTTP header信息(request)例子

    servlet3.0新特性源代码

    *在创建项目的时候首先添加Tomcat7.x的支持,然后把apache-tomcat-7.0.27\conf\web.xml拷贝到项目WEB-INF目录下 *把之前的web.xml覆盖.. 配置留下 &lt;?xml version="1.0" encoding="ISO-8859-1"?&gt; &lt;web-app ...

    java开发实例之Servlet

    java开发实例之Servlet String agent = request.getHeader("user-agent"); StringTokenizer st = new StringTokenizer(agent,";");

    UserAgentUtils-1.21.jar

    String agentStr = ServletUtils.getRequest().getHeader("User-Agent"); UserAgent userAgent = UserAgent.parseUserAgentString(agentStr); userAgent.getBrowser().getName() userAgent.getOperatingSystem()....

    request的63个方法

    getAttributeNames "返回request对象的所有属性名称的集合。 " getAuthType "返回用来保护servlet的认证方法的名称,未受保护时返回null。 " getCharacterEncoding "返回请求中的字符编码方法,可以在response对象中...

    Nginx+Tomcat负载均衡

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; proxy_...

    Filter_Listener相信代码使用

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest reque=(HttpServletRequest) request; System.out...

    JAVA程序员面试题

    getRemoteAddr():获取客户端的IP地址 getRemoteHost():获取客户端的名字 getSession([Boolean create]):返回和请求相关Session getServerName():获取服务器的名字 getServletPath():获取客户端所请求的脚本文件...

    jsp九大内置对象

     String strHeader =request.getHeader("accept")  1.06 getRermoteAddr() 获取客户的IP地址。  String strIP =request.getRemoteAddr()  1.07 getRemoteHost() 获取客户机的名称。  String clientName =...

Global site tag (gtag.js) - Google Analytics