但是在转发请求的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教程有兴趣的朋友有所帮助。
