逐步解析代码:public static String getIpAddr(HttpServletRequest request) { if (request == null) { return "unknown"; } 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("X-Forwarded-For"); } 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("X-Real-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : getMultistageReverseProxyIp(ip); }
时间: 2023-06-01 07:06:09 浏览: 64
这段代码是用来获取用户访问的IP地址的。首先判断请求对象是否存在,如果不存在,返回"unknown"。然后通过 request.getHeader() 方法获取各种可能的客户端IP地址,如果为空或者为"unknown",继续获取下一个可能的IP地址,直到最后一个获取不到时,返回 request.getRemoteAddr() 方法获取的IP地址。最后判断获取到的IP地址是否是"0:0:0:0:0:0:0:1",如果是,则将IP地址替换为"127.0.0.1",否则调用 getMultistageReverseProxyIp() 方法处理IP地址并返回。
相关问题
HttpServletRequest获取ip
HttpServletRequest对象可以通过以下几种方法获取IP地址:
第一种方法:
```
public final static String getIpAddress(HttpServletRequest request) {
String ip = "";
try {
// 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址
ip = request.getHeader("X-Forwarded-For");
if (ip != null && ip.length() > 0 && !"unKnown".equalsIgnoreCase(ip)) {
// 多次反向代理后会有多个ip值,第一个ip才是真实ip
int index = ip.indexOf(",");
if (index != -1) {
return ip.substring(0, index);
} else {
return ip;
}
}
ip = request.getHeader("X-Real-IP");
if (ip != null && ip.length() > 0 && !"unKnown".equalsIgnoreCase(ip)) {
return ip;
}
ip= request.getRemoteAddr();
} catch (Exception e) {
// 异常处理
}
return ip;
}
```
第二种方法:
可以使用以下代码直接获取IP地址:
```
String ip = request.getRemoteAddr();
```
用java代码写出 : 获取用户登录时的IP地址 , 以形成用户登录日志 , 并写出需要用到哪些jar包
获取用户登录时的IP地址的Java代码:
```java
import javax.servlet.http.HttpServletRequest;
public class UserLoginLog {
public static String getIpAddress(HttpServletRequest request) {
String ipAddress = request.getHeader("x-forwarded-for");
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("WL-Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getRemoteAddr();
}
return ipAddress;
}
}
```
需要用到的jar包:
- servlet-api.jar(用于获取HttpServletRequest对象)