1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Java根据ip地址获取归属地

Java根据ip地址获取归属地

时间:2021-07-25 13:29:39

相关推荐

Java根据ip地址获取归属地

由于最近比较忙,所以一直没有更新博客。今天有一点点时间,来分享一下项目中用到的一个需求功能点。

需求描述:获取用户真实ip和ip归属地

实现效果:

重点:IP地址工具类

import cn.hutool.core.util.StrUtil;import cn.hutool.http.HttpUtil;import cn.hutool.json.JSONObject;import cn.hutool.json.JSONUtil;import mons.lang3.StringUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import javax.servlet.http.HttpServletRequest;public class IPUtils {private static Logger logger = LoggerFactory.getLogger(IPUtils.class);/*** 获取IP地址* * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址* 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址*/public static String getIpAddr(HttpServletRequest request) {String ip = null;try {ip = request.getHeader("x-forwarded-for");if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("Proxy-Client-IP");}if (StringUtils.isEmpty(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("WL-Proxy-Client-IP");}if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("HTTP_CLIENT_IP");}if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("HTTP_X_FORWARDED_FOR");}if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {ip = request.getRemoteAddr();}} catch (Exception e) {logger.error("IPUtils ERROR ", e);}//使用代理,则获取第一个IP地址if(StringUtils.isEmpty(ip) ) {if(ip.indexOf(",") > 0) {ip = ip.substring(0, ip.indexOf(","));}}return ip;}/*** 根据ip获取归属地* @param ip* @return*/public static String getAddress(String ip) {String url = "http://ip./ipquery?ip=" + ip;String str = HttpUtil.get(url);if(!StrUtil.hasBlank(str)){String substring = str.substring(str.indexOf("{"), str.indexOf("}")+1);JSONObject jsonObject = JSONUtil.parseObj(substring);String province = jsonObject.getStr("province");String city = jsonObject.getStr("city");return "ip:"+ ip + ",省份:" + province + ",城市:" + city;}return null;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。