From 9c20c91b8f5079c341e1a9e004b1c3d6f24aa1f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E7=90=A6=E6=B6=9B?= Date: Tue, 15 Oct 2024 18:09:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=A4=96=E9=83=A8=E5=AF=B9?= =?UTF-8?q?=E6=8E=A5=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/LawsSysApiInfoController.java | 10 +-- .../api/service/ILawsSysApiInfoService.java | 6 +- .../impl/LawsSysApiInfoServiceImpl.java | 61 ++++++++++++++++--- 3 files changed, 64 insertions(+), 13 deletions(-) diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/api/controller/LawsSysApiInfoController.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/api/controller/LawsSysApiInfoController.java index d576893c..dc09773e 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/api/controller/LawsSysApiInfoController.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/api/controller/LawsSysApiInfoController.java @@ -9,6 +9,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.Map; @@ -29,8 +30,9 @@ public class LawsSysApiInfoController { @PostMapping("/getStandardDataPage") public Result> getStandardDataPage(@RequestBody StandardData standardData, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { - return lawsSysApiInfoService.getStandardDataPage(standardData,pageNo,pageSize); + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + return lawsSysApiInfoService.getStandardDataPage(standardData,pageNo,pageSize,req); } @@ -39,8 +41,8 @@ public class LawsSysApiInfoController { * @return */ @PostMapping("/getStandardDataList") - public Result> getStandardDataList(@RequestBody StandardData standardData) { - return lawsSysApiInfoService.getStandardDataList(standardData); + public Result> getStandardDataList(@RequestBody StandardData standardData,HttpServletRequest req) { + return lawsSysApiInfoService.getStandardDataList(standardData,req); } diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/api/service/ILawsSysApiInfoService.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/api/service/ILawsSysApiInfoService.java index db9092fe..e3711854 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/api/service/ILawsSysApiInfoService.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/api/service/ILawsSysApiInfoService.java @@ -6,13 +6,15 @@ import com.jero.common.api.vo.Result; import com.jero.modules.docking.api.entity.LawsSysApiInfo; import com.jero.modules.docking.api.vo.StandardData; +import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.Map; public interface ILawsSysApiInfoService extends IService { - Result> getStandardDataPage(StandardData standardData,Integer pageNo,Integer pageSize); + Result> getStandardDataPage(StandardData standardData,Integer pageNo,Integer pageSize, + HttpServletRequest req); - Result> getStandardDataList(StandardData standardData); + Result> getStandardDataList(StandardData standardData,HttpServletRequest req); } diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/api/service/impl/LawsSysApiInfoServiceImpl.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/api/service/impl/LawsSysApiInfoServiceImpl.java index d734f7ec..a6f1b150 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/api/service/impl/LawsSysApiInfoServiceImpl.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/api/service/impl/LawsSysApiInfoServiceImpl.java @@ -1,5 +1,6 @@ package com.jero.modules.docking.api.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -23,6 +24,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import java.text.SimpleDateFormat; import java.util.*; @@ -42,9 +44,12 @@ public class LawsSysApiInfoServiceImpl extends ServiceImpl> getStandardDataPage(StandardData standardData,Integer pageNo,Integer pageSize) { - - // todo 未添加其他系统访问校验 + public Result> getStandardDataPage(StandardData standardData,Integer pageNo,Integer pageSize, + HttpServletRequest req) { + String msg = checkSysInfo(standardData.getAppKey(),standardData.getSecret(),req); + if(!StringUtils.isEmpty(msg)){ + return Result.error(msg); + } QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(!StringUtils.isEmpty(standardData.getStandardNumber()),"standard_number",standardData.getStandardNumber()); queryWrapper.like(!StringUtils.isEmpty(standardData.getStandardName()),"standard_name",standardData.getStandardName()); @@ -55,7 +60,11 @@ public class LawsSysApiInfoServiceImpl extends ServiceImpl> getStandardDataList(StandardData standardData) { + public Result> getStandardDataList(StandardData standardData,HttpServletRequest req) { + String msg = checkSysInfo(standardData.getAppKey(),standardData.getSecret(),req); + if(!StringUtils.isEmpty(msg)){ + return Result.error(msg); + } QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(!StringUtils.isEmpty(standardData.getStandardNumber()),"standard_number",standardData.getStandardNumber()); queryWrapper.like(!StringUtils.isEmpty(standardData.getStandardName()),"standard_name",standardData.getStandardName()); @@ -64,11 +73,49 @@ public class LawsSysApiInfoServiceImpl extends ServiceImpl query = new LambdaQueryWrapper<>(); + query.eq(LawsSysApiInfo::getAppKey,appKey); + query.eq(LawsSysApiInfo::getSecret,secret); + LawsSysApiInfo lawsSysApiInfo = getOne(query,false); + if(Objects.isNull(lawsSysApiInfo)){ + return "非法请求"; + } + if(!StringUtils.isEmpty(lawsSysApiInfo.getIp()) + && !Arrays.asList(lawsSysApiInfo.getIp().split(",")).contains(getClientIp(req))){ + return "非法请求"; + } return null; } + + private String getClientIp(HttpServletRequest request) { + String ipAddress = request.getHeader("X-Forwarded-For"); + if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getHeader("Proxy-Client-IP"); + } + if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getHeader("WL-Proxy-Client-IP"); + } + if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getHeader("HTTP_CLIENT_IP"); + } + if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getRemoteAddr(); + } + + // 如果X-Forwarded-For有多层代理,取第一个IP作为客户端真实IP + if (ipAddress != null && ipAddress.contains(",")) { + ipAddress = ipAddress.split(",")[0]; + } + + return ipAddress; + } }