From 1f3da61eaab7325155f1e8b15a168773de0641bc Mon Sep 17 00:00:00 2001 From: zhouyl <583641232@qq.com> Date: Mon, 2 Sep 2024 16:22:45 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=20=20ip=E9=BB=91=E5=90=8D?= =?UTF-8?q?=E5=8D=95=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/constant/Constants.java | 5 + .../common/encrypt/filter/CryptoFilter.java | 6 - .../framework/config/ResourcesConfig.java | 2 + .../interceptor/IpAccessInterceptor.java | 37 ++++++ .../controller/CpuInfoController.java | 12 +- .../controller/IpFilterController.java | 112 ++++++++++++++++++ .../functional/domain/IpFilter.java | 33 ++++++ .../functional/mapper/IpFilterMapper.java | 18 +++ .../functional/service/IpFilterService.java | 18 +++ .../service/impl/IpFilterServiceImpl.java | 39 ++++++ 10 files changed, 270 insertions(+), 12 deletions(-) create mode 100644 tp-framework/src/main/java/com/inscloudtech/framework/interceptor/IpAccessInterceptor.java create mode 100644 tp-functional/src/main/java/com/inscloudtech/functional/controller/IpFilterController.java create mode 100644 tp-functional/src/main/java/com/inscloudtech/functional/domain/IpFilter.java create mode 100644 tp-functional/src/main/java/com/inscloudtech/functional/mapper/IpFilterMapper.java create mode 100644 tp-functional/src/main/java/com/inscloudtech/functional/service/IpFilterService.java create mode 100644 tp-functional/src/main/java/com/inscloudtech/functional/service/impl/IpFilterServiceImpl.java diff --git a/tp-common/src/main/java/com/inscloudtech/common/constant/Constants.java b/tp-common/src/main/java/com/inscloudtech/common/constant/Constants.java index e44555a..5263ce1 100644 --- a/tp-common/src/main/java/com/inscloudtech/common/constant/Constants.java +++ b/tp-common/src/main/java/com/inscloudtech/common/constant/Constants.java @@ -76,5 +76,10 @@ public interface Constants { * 资源映射路径 前缀 */ String RESOURCE_PREFIX = "/profile"; + + /** + * ip黑名单 + */ + String BLACK_IP_LIST = "blackIpList"; } diff --git a/tp-common/src/main/java/com/inscloudtech/common/encrypt/filter/CryptoFilter.java b/tp-common/src/main/java/com/inscloudtech/common/encrypt/filter/CryptoFilter.java index 5d2aecd..46c9188 100644 --- a/tp-common/src/main/java/com/inscloudtech/common/encrypt/filter/CryptoFilter.java +++ b/tp-common/src/main/java/com/inscloudtech/common/encrypt/filter/CryptoFilter.java @@ -1,9 +1,6 @@ package com.inscloudtech.common.encrypt.filter; import cn.hutool.core.util.ObjectUtil; - - -import cn.hutool.core.util.ReUtil; import com.inscloudtech.common.constant.HttpStatus; import com.inscloudtech.common.encrypt.annotation.ApiEncrypt; import com.inscloudtech.common.encrypt.properties.ApiDecryptProperties; @@ -14,15 +11,12 @@ import org.springframework.http.HttpMethod; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.HandlerExecutionChain; -import org.springframework.web.servlet.mvc.method.RequestMappingInfo; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.Map; -import java.util.Objects; /** diff --git a/tp-framework/src/main/java/com/inscloudtech/framework/config/ResourcesConfig.java b/tp-framework/src/main/java/com/inscloudtech/framework/config/ResourcesConfig.java index fe453cd..ff93a53 100644 --- a/tp-framework/src/main/java/com/inscloudtech/framework/config/ResourcesConfig.java +++ b/tp-framework/src/main/java/com/inscloudtech/framework/config/ResourcesConfig.java @@ -1,5 +1,6 @@ package com.inscloudtech.framework.config; +import com.inscloudtech.framework.interceptor.IpAccessInterceptor; import com.inscloudtech.framework.interceptor.PlusWebInvokeTimeInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -21,6 +22,7 @@ public class ResourcesConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { // 全局访问性能拦截 + registry.addInterceptor(new IpAccessInterceptor()); registry.addInterceptor(new PlusWebInvokeTimeInterceptor()); } diff --git a/tp-framework/src/main/java/com/inscloudtech/framework/interceptor/IpAccessInterceptor.java b/tp-framework/src/main/java/com/inscloudtech/framework/interceptor/IpAccessInterceptor.java new file mode 100644 index 0000000..e991e25 --- /dev/null +++ b/tp-framework/src/main/java/com/inscloudtech/framework/interceptor/IpAccessInterceptor.java @@ -0,0 +1,37 @@ +package com.inscloudtech.framework.interceptor; + +import com.inscloudtech.common.constant.Constants; +import com.inscloudtech.common.utils.ServletUtils; +import com.inscloudtech.common.utils.redis.RedisUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import org.springframework.web.servlet.HandlerInterceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * ip访问拦截 + */ +@Component +@Slf4j +public class IpAccessInterceptor implements HandlerInterceptor { + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + String ip = ServletUtils.getClientIP(); + List cacheSet = RedisUtils.getCacheList(Constants.BLACK_IP_LIST); + if (cacheSet.contains(ip)) { + // 在黑名单中直接拒绝访问 + log.info("ip:{} 在黑名单中拒绝访问.....", ip); + return false; + } + + // 验证通过 + return true; + } + +} diff --git a/tp-functional/src/main/java/com/inscloudtech/functional/controller/CpuInfoController.java b/tp-functional/src/main/java/com/inscloudtech/functional/controller/CpuInfoController.java index 1901fef..5e9fb26 100644 --- a/tp-functional/src/main/java/com/inscloudtech/functional/controller/CpuInfoController.java +++ b/tp-functional/src/main/java/com/inscloudtech/functional/controller/CpuInfoController.java @@ -118,12 +118,12 @@ public class CpuInfoController { } static String url = "https://cpu.bmcx.com/{}__cpu/"; - - public static void main(String[] args) { - CpuInfo info = new CpuInfo(); - info.setId("5493"); - updateByURL(info); - } +// +// public static void main(String[] args) { +// CpuInfo info = new CpuInfo(); +// info.setId("5493"); +// updateByURL(info); +// } static void updateByURL(CpuInfo cpuInfo){ diff --git a/tp-functional/src/main/java/com/inscloudtech/functional/controller/IpFilterController.java b/tp-functional/src/main/java/com/inscloudtech/functional/controller/IpFilterController.java new file mode 100644 index 0000000..5612b37 --- /dev/null +++ b/tp-functional/src/main/java/com/inscloudtech/functional/controller/IpFilterController.java @@ -0,0 +1,112 @@ +package com.inscloudtech.functional.controller; + + +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.inscloudtech.common.annotation.Log; +import com.inscloudtech.common.annotation.RepeatSubmit; +import com.inscloudtech.common.core.controller.BaseController; +import com.inscloudtech.common.core.domain.PageQuery; +import com.inscloudtech.common.core.domain.R; +import com.inscloudtech.common.core.page.TableDataInfo; +import com.inscloudtech.common.core.validate.AddGroup; +import com.inscloudtech.common.core.validate.EditGroup; +import com.inscloudtech.common.enums.BusinessType; +import com.inscloudtech.functional.domain.IpFilter; +import com.inscloudtech.functional.service.IpFilterService; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.Arrays; + + +/** + * IP黑名单管理 + * + * @author inscloudtech + * @date 2024-09-02 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/functional/ipFilter") +public class IpFilterController extends BaseController { + + private final IpFilterService iIpFilterService; + + /** + * 分页查询 + * @param + * @param + * @return + */ + @GetMapping("/page") + public TableDataInfo getCpuInfoPage(PageQuery pageQuery, IpFilter filter) { + Page page = new Page(); + page.setSize(pageQuery.getPageSize()); + page.setCurrent(pageQuery.getPageNum()); + Page result = iIpFilterService.page(page, Wrappers.query(filter)); + TableDataInfo dataInfo = new TableDataInfo(); + dataInfo.setTotal(result.getTotal()); + dataInfo.setRows(result.getRecords()); + return dataInfo; + } + + + + + /** + * 获取IP黑名单管理详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("system:filter:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(iIpFilterService.getById(id)); + } + + /** + * 新增IP黑名单管理 + */ + @SaCheckPermission("system:filter:add") + @Log(title = "IP黑名单管理", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody IpFilter bo) { + iIpFilterService.save(bo); + iIpFilterService.updateBlackIpList(); + return R.ok(); + } + + /** + * 修改IP黑名单管理 + */ + @SaCheckPermission("system:filter:edit") + @Log(title = "IP黑名单管理", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody IpFilter bo) { + iIpFilterService.updateById(bo); + iIpFilterService.updateBlackIpList(); + return R.ok(); + } + + /** + * 删除IP黑名单管理 + * + * @param ids 主键串 + */ + @SaCheckPermission("system:filter:remove") + @Log(title = "IP黑名单管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(iIpFilterService.removeByIds(Arrays.asList(ids), true)); + } +} diff --git a/tp-functional/src/main/java/com/inscloudtech/functional/domain/IpFilter.java b/tp-functional/src/main/java/com/inscloudtech/functional/domain/IpFilter.java new file mode 100644 index 0000000..cce7177 --- /dev/null +++ b/tp-functional/src/main/java/com/inscloudtech/functional/domain/IpFilter.java @@ -0,0 +1,33 @@ +package com.inscloudtech.functional.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.inscloudtech.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +/** + * IP黑名单管理对象 ip_filter + * + * @author inscloudtech + * @date 2024-09-02 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("ip_filter") +public class IpFilter extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 主键 + */ + @TableId(value = "id") + private Long id; + /** + * ip + */ + @TableField(condition = SqlCondition.LIKE) + private String ip; + +} diff --git a/tp-functional/src/main/java/com/inscloudtech/functional/mapper/IpFilterMapper.java b/tp-functional/src/main/java/com/inscloudtech/functional/mapper/IpFilterMapper.java new file mode 100644 index 0000000..ad352f1 --- /dev/null +++ b/tp-functional/src/main/java/com/inscloudtech/functional/mapper/IpFilterMapper.java @@ -0,0 +1,18 @@ +package com.inscloudtech.functional.mapper; + + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.inscloudtech.functional.domain.CpuInfo; +import com.inscloudtech.functional.domain.IpFilter; +import org.apache.ibatis.annotations.Mapper; + +/** + * + * @author zfcf + * @date 2024-08-28 + */ +@Mapper +public interface IpFilterMapper extends BaseMapper { + +} diff --git a/tp-functional/src/main/java/com/inscloudtech/functional/service/IpFilterService.java b/tp-functional/src/main/java/com/inscloudtech/functional/service/IpFilterService.java new file mode 100644 index 0000000..a927047 --- /dev/null +++ b/tp-functional/src/main/java/com/inscloudtech/functional/service/IpFilterService.java @@ -0,0 +1,18 @@ +package com.inscloudtech.functional.service; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.inscloudtech.functional.domain.IpFilter; + + +/** + * cpu信息Service接口 + * @author zfcf + * @date 2024-08-28 + */ +public interface IpFilterService extends IService { + + void updateBlackIpList(); + +} + diff --git a/tp-functional/src/main/java/com/inscloudtech/functional/service/impl/IpFilterServiceImpl.java b/tp-functional/src/main/java/com/inscloudtech/functional/service/impl/IpFilterServiceImpl.java new file mode 100644 index 0000000..415ec35 --- /dev/null +++ b/tp-functional/src/main/java/com/inscloudtech/functional/service/impl/IpFilterServiceImpl.java @@ -0,0 +1,39 @@ +package com.inscloudtech.functional.service.impl; + + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.inscloudtech.common.constant.Constants; +import com.inscloudtech.common.utils.redis.RedisUtils; +import com.inscloudtech.functional.domain.CpuInfo; +import com.inscloudtech.functional.domain.IpFilter; +import com.inscloudtech.functional.mapper.CpuInfoMapper; +import com.inscloudtech.functional.mapper.IpFilterMapper; +import com.inscloudtech.functional.service.CpuInfoService; +import com.inscloudtech.functional.service.IpFilterService; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import java.util.List; +import java.util.Set; + +/** + * cpu信息 + * + * @author zfcf + * @date 2024-08-28 + */ +@Service +public class IpFilterServiceImpl extends ServiceImpl implements IpFilterService { + + @PostConstruct + void init(){ + RedisUtils.setCacheList(Constants.BLACK_IP_LIST,this.list()); + System.out.println("初始化ip白名单"); + } + + + @Override + public void updateBlackIpList(){ + RedisUtils.setCacheList(Constants.BLACK_IP_LIST,this.list()); + } +}