最近刷抖音发现上线了 IP 属地的功能,小伙伴在发表动态、发表评论以及聊天的时候,都会显示自己的 IP 属地信息,其核心意义是让用户更具有真实性,减少虚假欺骗事件。正好最近本人开发获取客户端ip,做一些接口限流,黑白名单等需求功能,顺路就研究了一下怎么解析IP获取归属地问题。
接下来,就着重讲解一下Java后端怎么实现IP归属地的功能,其实只需要以下两大步骤:
2.获取客户端ip接口做过web开发都知道,无论移动端还是pc端的请求接口都会被封装成为一个HttpServletRequest对象,该对象包含了客户端请求信息包括请求的地址,请求的参数,提交的数据等等。
如果服务器直接把IP暴漏出去,那么request.getRemoteAddr()就能拿到客户端ip。
但目前流行的架构中,基本上服务器都不会直接把自己的ip暴漏出去,一般前面还有一层或多层反向代理,常见的nginx居多。 加了代理后,相当于服务器和客户端中间还有一层,这时·request.getRemoteAddr()拿到的就是代理服务器的ip了,并不是客户端的ip。所以这种情况下,一般会在转发头上加X-Forwarded-For等信息,用来跟踪原始客户端的ip。
X-Forwarded-For: 这是一个 Squid 开发的字段,只有在通过了HTTP代理或者负载均衡服务器时才会添加该项。 格式为X-Forwarded-For:client1,proxy1,proxy2,一般情况下,第一个ip为客户端真实ip,后面的为经过的代理服务器ip。 上面的代码注释也说的很清楚,直接截取拿到第一个ip。 Proxy-Client-IP/WL- Proxy-Client-IP: 这个一般是经过apache http服务器的请求才会有,用apache http做代理时一般会加上Proxy-Client-IP请求头,而WL-Proxy-Client-IP是他的weblogic插件加上的头。这种情况也是直接能拿到。 HTTP_CLIENT_IP: 有些代理服务器也会加上此请求头。 X-Real-IP: nginx一般用这个。
但是在日常开发中,并没有规范规定用以上哪一个头信息去跟踪客户端,所以都有可能,只能一一尝试,直到获取到为止。代码如下:
复制代码
@Slf4jpublic class IpUtils { private static final String IP_DATA_PATH = "/Users/shepherdmy/Desktop/ip2region.xdb"; private static byte[] contentBuff; static { try { // 从 dbPath 加载整个 xdb 到内存。contentBuff = Searcher.loadContentFromFile(IP_DATA_PATH); } catch (IOException e) { e.printStackTrace(); } } /** * 根据ip查询归属地,固定格式:中国|0|浙江省|杭州市|电信 * @param ip * @return */ public static IpRegion getIpRegion(String ip) { Searcher searcher = null; IpRegion ipRegion = new IpRegion(); try {searcher = Searcher.newWithBuffer(contentBuff); String region = searcher.search(ip); String[]info = StringUtils.split(region, "|"); ipRegion.setCountry(info[0]); ipRegion.setArea(info[1]); ipRegion.setProvince(info[2]); ipRegion.setCity(info[3]); ipRegion.setIsp(info[4]); } catch (Exception e) { log.error("get ip region error: ", e); } finally { if (searcher != null) { try { searcher.close(); } catch (IOException e) { log.error("close searcher error:", e); } } } return ipRegion; }}
以上就是为什么有抖音默认位置的全部内容,希望可以帮助到大家!
龙武士李小龙破解版
动作格斗108.87MB
下载保卫萝卜四
策略塔防170.9M
下载葫芦侠游戏盒
其他游戏34.2M
下载现代战争2019无限金币版
飞行射击33.9M
下载途游游戏平台手游官网版
卡牌桌游70M
下载叶罗丽美颜公主游戏
模拟经营69.4M
下载卡通农场
模拟经营146.18M
下载饥饿的蟒蛇模拟器无限金币版
休闲益智53.6M
下载音乐赛车苹果版
赛车竞速195KB
下载宝可梦我的世界
模拟经营135MB
下载