1、如果服务器如果没有采用反向代理,而且客户端没有用正向代理的话,那么可以获取客户端的真实IP地址request.getRemoteAddr()
2、如果服务器如果没有采用反向代理,而且客户端有用正向代理的话,那么通过request.getRemoteAddr()获取客户端的IP地址是客户端 的代理服务器的地址,并不是客户端的真实地址,
3、如果客户端使用的是多层代理的话,服务器获得的客户端地址是客户端的最外围代理服务器的地址如果服务器如果采用反向代理服务器,不管客户端采用的是何种方式访问服务器。
//获得客户端真实IP地址的方法一:
public
String getRemortIP(HttpServletRequest request) {
if
(request.getHeader(
"x-forwarded-for"
) ==
null
) {
return
request.getRemoteAddr();
}
return
request.getHeader(
"x-forwarded-for"
);
}
//获得客户端真实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;
}