From 2e07b49209a059bfa3a7c38bf8d482fdf9e18afb Mon Sep 17 00:00:00 2001
From: xjs <1294405880@qq.com>
Date: Mon, 24 Jan 2022 14:51:00 +0800
Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=89=8D=E7=AB=AF=E5=B7=A5=E5=85=B7?=
=?UTF-8?q?=E6=A8=A1=E5=9D=97ip=E4=BF=A1=E6=81=AF=E5=8A=9F=E8=83=BD?=
=?UTF-8?q?=E5=AE=9E=E7=8E=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ruoyi-ui/src/api/business/openapi/apitools.js | 8 ++
.../views/business/tools/apitools/index.vue | 82 ++++++++++++++++---
.../main/java/com/xjs/consts/RegexConst.java | 5 ++
.../controller/ApiToolsController.java | 7 +-
.../weather/factory/impl/RollIPFactory.java | 2 +-
5 files changed, 88 insertions(+), 16 deletions(-)
diff --git a/ruoyi-ui/src/api/business/openapi/apitools.js b/ruoyi-ui/src/api/business/openapi/apitools.js
index b36d53b9..029d6547 100644
--- a/ruoyi-ui/src/api/business/openapi/apitools.js
+++ b/ruoyi-ui/src/api/business/openapi/apitools.js
@@ -86,6 +86,14 @@ export function getChineseDict(content) {
})
}
+//获取ip信息
+export function getIpInfo(ip) {
+ return request({
+ url: '/openapi/apitools/ipinfo/'+ip,
+ method: 'get',
+ })
+}
+
diff --git a/ruoyi-ui/src/views/business/tools/apitools/index.vue b/ruoyi-ui/src/views/business/tools/apitools/index.vue
index a2326e7f..344146e1 100644
--- a/ruoyi-ui/src/views/business/tools/apitools/index.vue
+++ b/ruoyi-ui/src/views/business/tools/apitools/index.vue
@@ -370,21 +370,37 @@
-
-
-
+
+
+
-
+ v-model="ipInfoVisible">
+
+
+ 城市:{{ ipInfoData.city }}
+
+
+ 省份:{{ ipInfoData.province }}
+
+
+ 服务商:{{ ipInfoData.isp }}
+
+
+ IP:{{ ipInfoData.ip }}
+
+
+ 描述:{{ ipInfoData.desc }}
+
+
- 搜索
+ 搜索
@@ -410,7 +426,8 @@ import {
getForecastWeather,
getGarbageSorting,
getSimpleComplex,
- getChineseDict
+ getChineseDict,
+ getIpInfo
} from "@/api/business/openapi/apitools";
import weather from "@/assets/icons/weather/天气.png"
@@ -437,10 +454,9 @@ export default {
goodsName: '-',
goodsType: '-',
}],
-
-
simpleComplexData: {},
chineseDictData: {},
+ ipInfoData: {},
//-------------input框数据-------------------
idCardForm: {
@@ -464,6 +480,9 @@ export default {
chineseDictForm: {
content: ''
},
+ ipInfoForm: {
+ ip: ''
+ },
//------------控制弹出显示隐藏-----------------
holidayVisible: false,
@@ -476,6 +495,7 @@ export default {
garbageSortingVisible: false,
simpleComplexVisible: false,
chineseDictVisible: false,
+ ipInfoVisible: false,
//----------------遮罩层-------------------
loading1: false,
@@ -488,6 +508,7 @@ export default {
loading8: false,
loading9: false,
loading10: false,
+ loading11: false,
//---------------校验规则--------------------
rules: {
@@ -505,13 +526,17 @@ export default {
name: [
{required: true, message: '请输入垃圾名称!!!', trigger: 'blur'},
],
- content:[
+ content: [
{required: true, message: '请输入垃圾名称!!!', trigger: 'blur'},
],
dict: [
{required: true, message: '请输入简体中文!!!', trigger: 'blur'},
{min: 1, max: 1, message: '长度在 1 个字符', trigger: 'blur'}
],
+ ip: [
+ {required: true, message: '请输入IP地址!!!', trigger: 'blur'},
+ {required: true, validator: this.validatorIp, trigger: 'blur'},
+ ],
},
@@ -525,6 +550,25 @@ export default {
,
methods: {
+ //获取Ip信息
+ getIpInfo(ipInfoForm) {
+ this.$refs[ipInfoForm].validate((valid) => {
+ this.ipInfoData = {}
+ if (valid) {
+ this.loading11 = true
+ getIpInfo(this.ipInfoForm.ip).then(res => {
+ this.loading11 = false
+ this.ipInfoVisible = true
+ this.ipInfoData = res.data
+ }).catch(err => {
+ this.loading11 = false
+ })
+ } else {
+ return false
+ }
+ })
+ },
+
//获取汉语字典信息
getChineseDict(chineseDictForm) {
this.$refs[chineseDictForm].validate((valid) => {
@@ -652,6 +696,17 @@ export default {
}
},
+ validatorIp(rule, value, callback) {
+ const reg = /^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$/
+ if (!value) {
+ return callback(new Error('ip地址不能为空'))
+ } else if (!reg.test(value)) {
+ return callback(new Error('ip地址不正确'))
+ } else {
+ callback()
+ }
+ },
+
//关闭窗口
close() {
this.mobileBelongVisible = false;
@@ -664,6 +719,7 @@ export default {
this.garbageSortingVisible = false;
this.simpleComplexVisible = false;
this.chineseDictVisible = false;
+ this.ipInfoVisible = false
},
//获取手机归属地信息
diff --git a/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/RegexConst.java b/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/RegexConst.java
index 472ac995..a982dbda 100644
--- a/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/RegexConst.java
+++ b/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/RegexConst.java
@@ -22,4 +22,9 @@ public class RegexConst {
* 15位身份证正则
*/
public static final String IDCARD_15_REGEX = "^([1-6][1-9]|50)\\d{4}\\d{2}((0[1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\\d{3}$";
+
+ /**
+ * ip地址v4、v6正则
+ */
+ public static final String IP_REGEX ="^((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)$";
}
diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/controller/ApiToolsController.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/controller/ApiToolsController.java
index e1af9a9d..3f144471 100644
--- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/controller/ApiToolsController.java
+++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/controller/ApiToolsController.java
@@ -130,7 +130,6 @@ public class ApiToolsController {
}
}
-
@GetMapping("idcardquery/{idcard}")
@ApiOperation("获取身份证信息")
@Log(title = "获取身份证信息")
@@ -149,7 +148,11 @@ public class ApiToolsController {
@Log(title = "获取IP")
@RequiresPermissions("open:apitools:ipinfo")
public R getIPApiData(@PathVariable("ip")String ip) {
- return R.ok(ipService.getIPApiData(ip));
+ boolean matches = Pattern.matches(IP_REGEX, ip);
+ if (matches) {
+ return R.ok(ipService.getIPApiData(ip));
+ }
+ return R.fail("请输入正确的IP地址");
}
}
diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/weather/factory/impl/RollIPFactory.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/weather/factory/impl/RollIPFactory.java
index bdf0efcf..fb7917f9 100644
--- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/weather/factory/impl/RollIPFactory.java
+++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/weather/factory/impl/RollIPFactory.java
@@ -51,7 +51,7 @@ public class RollIPFactory implements IPFactory {
JSONObject data = jsonObject.getJSONObject("data");
return data.toJavaObject(IPInfoVo.class);
} else {
- log.error("天行全网热搜服务调用成功,但返回异常");
+ log.error("roll 获取ip信息,返回异常(ip不合法)");
if (redisService.hasKey(IP_INFO)) {
return (IPInfoVo) redisService.getCacheObject(IP_INFO);
} else {