一 点睛
获取IP地址是我们常常需要实现的一个功能,在此提供一下工具类。
二 代码
1 工具类
package com.imooc.demo.common.util;
import javax.servlet.http.HttpServletRequest;
/**
* @className: RequestIpUtils
* @description: 获取用户真实IP
* @date: 2020/8/20
* @author: cakin
*/
public class RequestIpUtils {
/**
* 功能描述:获取用户真实IP
*
* @author cakin
* @date 2020/8/20
* @param request 请求
* @return String IP地址
*/
public static String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
// 多次反向代理后会有多个ip值,第一个ip才是真实ip
if( ip.indexOf(",")!=-1 ){
ip = ip.split(",")[0];
}
}
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.getHeader("X-Real-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
}
2 测试类
@RequestMapping("/hello")
public String hello(HttpServletRequest req) {
// 获取IP地址
String ipAddr = RequestIpUtils.getIpAddr(req);
System.out.println(ipAddr);
return "hello Jenkins!Great!good!";
}
三 测试结果
1 浏览器输入: http://127.0.0.1:8888/hello
2 控制台输出:127.0.0.1