系统是微服务调用,可能涉及服务间调用导致无法获取真实IP问题,所以会在消费者处获取真实IP作为参数传输到服务提供者
ip2region只适用于国内,不适用海外
引入ip2region
<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId>
<version>1.7</version>
</dependency>
工具类
下面dbpath是因为我要放在linux下查找,好处就是可以更新db文件(不太推荐这种做法,每次都去加载资源文件)
import java.io.File;
import java.lang.reflect.Method;
import org.lionsoul.ip2region.DataBlock;
import org.lionsoul.ip2region.DbConfig;
import org.lionsoul.ip2region.DbSearcher;
import org.lionsoul.ip2region.Util;
public class IPUtil {
/**
* 获取Ip地址
* @param request
* @return
*/
public static String getIpAddress(HttpServletRequest request) {
String Xip = request.getHeader("X-Real-IP");
String XFor = request.getHeader("X-Forwarded-For");
if(StringUtils.isNotEmpty(XFor) && !"unKnown".equalsIgnoreCase(XFor)){
//多次反向代理后会有多个ip值,第一个ip才是真实ip
int index =