关于算法:玩转算法系列–图论精讲-面试升职必备Java版含源码ppt无mi分xiang

download:玩转算法系列–图论精讲 面试升职必备(Java版)含源码ppt无mi分xiang

自学it666 java python go c
教你如何用Java获取IP归属。
解释次要步骤:

从Java获取申请IP
解决Nginx转发问题
通过IP地址获取属性

获取IP地址
首先,应用基于Spring Boot的我的项目,在控制器中增加HttpServletRequest申请参数:
@RestController
公共类IpController {
@GetMapping(“/ip-address “)
公共字符串ipAddress(HttpServletRequest申请){
//接管申请
}
}
复制代码
通过HttpServletRequest获取IP地址:
string IP = request . get header(” x-forward-for “);
if (ip == null || ip.length() == 0 ||“未知”。equalsIgnoreCase(ip)) {
ip = request.getHeader(“代理-客户端-IP “);
}
if (ip == null || ip.length() == 0 ||“未知”。equalsIgnoreCase(ip)) {
IP = request . get header(” WL-代理-客户端-IP “);
}
if (ip == null || ip.length() == 0 ||“未知”。equalsIgnoreCase(ip)) {
IP = request . get header(” HTTP CLIENT IP “);
}
if (ip == null || ip.length() == 0 ||“未知”。equalsIgnoreCase(ip)) {
IP = request . get header(” HTTP X FORWARDED _ FOR “);
}
if (ip == null || ip.length() == 0 ||“未知”。equalsIgnoreCase(ip)) {
IP = request . getremoteaddr();
}
回归IP;
复制代码
调用以获取本地环境中的IP,0:0:0:0:0:0:0:1或LAN IP。

局域网IP以192.168.x.x结尾,或者是127.0.0.1的IP。

所以须要部署到外网服务器,获取公网地址。部署到外联网服务器能够胜利获取IP地址。
Nginx反向代理问题
间接拜访公网服务器地址能够胜利获取IP地址,然而Nginx反向代理获取的IP地址都是127.0.0.1。申请客户端Nginx服务器反向代理,转发给服务器。此时IP反向代理的IP,也就是Nginx服务器的IP,并不是真正的客户端IP。
将以下配置增加到Nginx的配置文件中的地位模块,以将客户端的IP传输到Nginx服务:
proxy set header X-Real-IP $ remote _ addr;
proxy set header X-Forwarded-For $ proxy add X Forwarded For;
复制代码
示例:
服务器{
听80;
server_name本地主机;
地位/ {
proxy set header X-Real-IP $ remote _ addr;
proxy set header X-Forwarded-For $ proxy add X Forwarded For;
proxy _ pass http://xxxx;
}
复制代码
以上操作实现后,即可胜利获取IP。而后通过IP取得归属地。
获取IP归属
个别应用IP获取归属时,会从地址库中找到匹配的地址。本文介绍两种办法。
买通home API。
您须要发动一个http申请。这里,Spring Boot的RestTemplate用于发动一个http申请。首先,创立RestTemplate的bean实例:
@配置
公共类RestTemplateConfig {

@Bean
公共RestTemplate restTemplate() {
返回新的rest template();
}
}
复制代码
而后调用RestTemplate发动http申请:
公有字符串URL = ” https://API . Beijing xuetang . com/API/common/IP “;
JSON object JSON object = new JSON object();
jsonObject.put(“ip “,IP);
JSONObject JSON = rest template . postforobject(URL,JSON object,JSON object . class);
if(JSON . getinteger(” code “)= = 0){
JSON = JSON . getjsonobject(” data “);
//国家
string nation = JSON . getstring(” nation “);
//省份
String province = json.getString(“省”);
//城市
string city = JSON . getstring(” city “);
}
复制代码

下面的json是fastjson的介绍。

通过地址库。
应用API接口,可能会呈现一些问题,如服务已死亡或服务地址不再可用。然而,应用本地地址库没有这些问题。
本文采纳离线IP地址地位库Ip2region。Ip2region是一个脱机Ip地址地位库,查问工夫为微秒级。

介绍maven依赖关系:

org.lionsoul
ip2区域
2.6.5

复制代码
获取归属:
私人搜寻者;

@笼罩
公共字符串getIpAddress(字符串ip){
if (“127.0.0.1 “。equals(IP)| | IP . starts with(” 192.168 “){
返回“局域网IP”;
}
if (searcher == null) {
尝试{
file file = resource utils . getfile(” class path:ipdb/IP 2 region . xdb “);
string dbPath = file . getpath();
searcher = searcher . newwithfileonly(dbPath);
} catch(file not found exception e){
e . printstacktrace();
} catch (IOException e) {
e . printstacktrace();
}
}
String region = null
String errorMessage = null
尝试{
region = searcher . search(IP);
} catch(异样e) {
error message = e . getmessage();
if (errorMessage!= null & & error message . length()> 256){
error message = error message . substring(0,256);
}
e . printstacktrace();
}
//输入区域
}

复制代码
获取区域以获取IP地址。

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据