1、依赖
<dependency><groupId>org.lionsoul</groupId><artifactId>ip2region</artifactId><version>2.7.0</version></dependency>
2.加入ip2region.xdb文件
ip2Region下载地址
3.加入到项目里面去
把 ip2region.xdb 文件放到 resources 文件夹里面的去
在Maven里面添加依赖,防止把这个xdb文件编译:
<plugin><artifactId>maven-resources-plugin</artifactId><configuration><nonFilteredFileExtensions><nonFilteredFileExtension>xdb</nonFilteredFileExtension></nonFilteredFileExtensions></configuration>
</plugin>
4.工具类
/*** 通过ip 获取ip所在地址* @param ip* @return*/public static String getIpAddress(String ip){if ("127.0.0.1".equals(ip) || ip.startsWith("192.168")) {return "局域网 ip";}//双重校验锁方式加载对象实例(懒汉式)if (searcher == null) {synchronized (HttpServletRequestUtils.class) {if (searcher == null) {try {Resource resource = new ClassPathResource("ip2region.xdb");HttpServletRequestUtils httpServletRequestUtils = new HttpServletRequestUtils();String filePath = httpServletRequestUtils.getClass().getClassLoader().getResource("ip2region.xdb").getFile();File file= new File(filePath);log.info("文件路径:{}是否存在:{}:", filePath, file.exists());// 通过流将文件复制到file中FileUtils.writeFile(resource.getInputStream(), filePath);//下面直接获取可能会导致 java.io.FileNotFoundException 异常
// File file = ResourceUtils.getFile("classpath:ipdb/ip2region.xdb");String dbPath = file.getPath();searcher = Searcher.newWithFileOnly(dbPath);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}}String region = null;String errorMessage = null;try {region = searcher.search(ip);} catch (Exception e) {errorMessage = e.getMessage();if (errorMessage != null && errorMessage.length() > 256) {errorMessage = errorMessage.substring(0,256);}e.printStackTrace();}// 输出 regionreturn region;}/** 读取返回结果*/private static String read(InputStream is) throws IOException {StringBuffer sb = new StringBuffer();BufferedReader br = new BufferedReader(new InputStreamReader(is));String line = null;while ((line = br.readLine()) != null) {line = new String(line.getBytes(), "utf-8");sb.append(line);}br.close();return sb.toString();}
5. 注意事项:
1.部署到线上之后:出现java文件操作报错:java.io.FileNotFoundException
java.io.FileNotFoundException: class path resource [ip2region.xdb]
cannot be resolved to absolute file path because it does not residein the file system: