介绍
客户端所有的请求信息都可以通过HttpServletRequest获得,获取客户端ip可以通过getRemoteAddr()获取。
但是如果客户端是通过代理访问我们的服务器,那么getRemoteAddr()获取到的ip就很有可能不是真实的ip,这时候我们可以通过请求头里的x-forwarded-for来获取真实的ip,请求每经一次代理,都会在后面拼接该代理的ip,以逗号分隔。
方法一:此方法获取真实IP(本机IP并不是127.0.0.1)
获取发送请求的电脑的IP地址,并返回
package ;
import ;
import ;
import ;
public class IpUtil {
/**
* 获取请求的ip
*/
public static String getRequestIp() {
RequestAttributes requestAttributes = ();
// 从获取RequestAttributes中获取HttpServletRequest的信息
HttpServletRequest request = (HttpServletRequest) (RequestAttributes.REFERENCE_REQUEST);
String ip = ("x-forwarded-for");
if (ip == null || () == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = ("Proxy-Client-IP");
}
if (ip == null || () == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = ("WL-Proxy-Client-IP");
}
if (ip == null || () == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = ("HTTP_CLIENT_IP");
}
if (ip == null || () == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = ("HTTP_X_FORWARDED_FOR");
}
if (ip == null || () == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = ();
}
return ip;
}
}
方法二:
RequestAttributes requestAttributes = ();
HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
String clientIP = (request);
// 本地的服务输出 IP:127.0.0.1
("IP:"+ clientIP);