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 {