您好,欢迎访问一九零五行业门户网

java中获取真是ip地址方法

在jsp里,获取客户端的ip地址的方法是:request.getremoteaddr(),这种方法在大部分情况下都是有效的。但是在通过了apache,squid,nginx等反向代理软件,由于在客户端和服务之间增加了中间层,所以request.getremoteaddr()方法获取的ip实际上是代理服务器的地址,并不是客户端的ip地址。
但是在转发请求的http头信息中,增加了x-forwarded-for信息。用以跟踪原有的客户端ip地址和原来客户端请求的服务器地址。
package com.rapido.utils; import javax.servlet.http.httpservletrequest; /** * 自定义访问对象工具类 * * 获取对象的ip地址等信息 * @author x-rapido * */public class cusaccessobjectutil { /** * 获取用户真实ip地址,不使用request.getremoteaddr();的原因是有可能用户使用了代理软件方式避免真实ip地址, * * 可是,如果通过了多级反向代理的话,x-forwarded-for的值并不止一个,而是一串ip值,究竟哪个才是真正的用户端的真实ip呢? * 答案是取x-forwarded-for中第一个非unknown的有效ip字符串。 * * 如:x-forwarded-for:192.168.1.110, 192.168.1.120, 192.168.1.130, * 192.168.1.100 * * 用户真实ip为: 192.168.1.110 * * @param request * @return */ public static string getipaddress(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.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(); } return ip; } }
以上就介绍了java中获取真是ip地址方法,包括了方面的内容,希望对php教程有兴趣的朋友有所帮助。
其它类似信息

推荐信息