初始化项目
This commit is contained in:
36
xtools-app-sys/xtools-app-sys-risk/pom.xml
Normal file
36
xtools-app-sys/xtools-app-sys-risk/pom.xml
Normal file
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.xujun</groupId>
|
||||
<artifactId>xtools-app-sys</artifactId>
|
||||
<version>1.0.0</version>
|
||||
</parent>
|
||||
<artifactId>xtools-app-sys-risk</artifactId>
|
||||
|
||||
<!-- 依赖 -->
|
||||
<dependencies>
|
||||
<!-- xtools begin -->
|
||||
<!-- xtools-boot-cache-redis -->
|
||||
<dependency>
|
||||
<groupId>org.xujun</groupId>
|
||||
<artifactId>xtools-boot-cache-redis</artifactId>
|
||||
</dependency>
|
||||
<!-- xtools end -->
|
||||
|
||||
<!-- 项目模块 begin -->
|
||||
<dependency>
|
||||
<groupId>org.xujun</groupId>
|
||||
<artifactId>xtools-app-common-cache</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.xujun</groupId>
|
||||
<artifactId>xtools-app-sys-api</artifactId>
|
||||
</dependency>
|
||||
<!-- 项目模块 end -->
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,86 @@
|
||||
package xtools.app.sys.risk;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
import xtools.app.sys.api.SysRiskApi;
|
||||
import xtools.app.sys.enums.SysRiskType;
|
||||
import xtools.app.sys.model.dto.resp.SysRiskResp;
|
||||
import xtools.app.sys.risk.utils.IpRiskUtils;
|
||||
import xtools.base.config.BaseParams;
|
||||
import xtools.boot.cache.redis.base.RedisService;
|
||||
import xtools.core.CollectionUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>Title : IpRisk</p>
|
||||
* <p>Description : IpRisk</p>
|
||||
* <p>DevelopTools : Idea_x64_v2026.1</p>
|
||||
* <p>DevelopSystem : Windows11</p>
|
||||
* <p>Company : org.xujun</p>
|
||||
*
|
||||
* @author : XuJun
|
||||
* @version : 1.0.0
|
||||
* @date : 2026/4/6 17:22
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class IpRisk implements BaseParams {
|
||||
|
||||
private final SysRiskApi sysRiskApi;
|
||||
|
||||
@Resource
|
||||
private RedisService redisService;
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
*/
|
||||
public void init() {
|
||||
List<SysRiskResp> dataList = sysRiskApi.getByType(SysRiskType.IP).data();
|
||||
if (CollectionUtils.isEmpty(dataList)) {
|
||||
log.info("无IP风控数据");
|
||||
return;
|
||||
}
|
||||
for (SysRiskResp item : dataList) {
|
||||
IpRiskUtils.addAll(item.getSysType(), item.getData());
|
||||
log.info("初始化[{}]IP风控成功", item.getSysType());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加IP风控
|
||||
*
|
||||
* @param sysType 系统类型
|
||||
* @param ip IP
|
||||
*/
|
||||
public void add(String sysType, String ip) {
|
||||
redisService.hashPut(IpRiskUtils.getKey(sysType), ip, CP_NUM0);
|
||||
sysRiskApi.addIp(sysType, ip);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除IP风控
|
||||
*
|
||||
* @param sysType 系统类型
|
||||
* @param ip IP
|
||||
*/
|
||||
public void remove(String sysType, String ip) {
|
||||
redisService.hashDelete(IpRiskUtils.getKey(sysType), ip);
|
||||
sysRiskApi.removeIp(sysType, ip);
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断IP是否风控
|
||||
*
|
||||
* @param sysType 系统类型
|
||||
* @param ip IP
|
||||
* @return 是否风控
|
||||
*/
|
||||
public boolean risk(String sysType, String ip) {
|
||||
return redisService.hashExists(IpRiskUtils.getKey(sysType), ip);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
package xtools.app.sys.risk;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
import xtools.app.sys.api.SysRiskApi;
|
||||
import xtools.app.sys.enums.SysRiskType;
|
||||
import xtools.app.sys.model.dto.resp.SysRiskResp;
|
||||
import xtools.app.sys.risk.utils.UriRiskUtils;
|
||||
import xtools.base.config.BaseParams;
|
||||
import xtools.boot.cache.redis.base.RedisService;
|
||||
import xtools.core.CollectionUtils;
|
||||
import xtools.core.StringUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>Title : UriRisk</p>
|
||||
* <p>Description : UriRisk</p>
|
||||
* <p>DevelopTools : Idea_x64_v2026.1</p>
|
||||
* <p>DevelopSystem : Windows11</p>
|
||||
* <p>Company : org.xujun</p>
|
||||
*
|
||||
* @author : XuJun
|
||||
* @version : 1.0.0
|
||||
* @date : 2026/4/6 17:22
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class UriRisk implements BaseParams {
|
||||
|
||||
private final SysRiskApi sysRiskApi;
|
||||
|
||||
@Resource
|
||||
private RedisService redisService;
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
*/
|
||||
public void init() {
|
||||
List<SysRiskResp> dataList = sysRiskApi.getByType(SysRiskType.URI).data();
|
||||
if (CollectionUtils.isEmpty(dataList)) {
|
||||
log.info("无URI风控数据");
|
||||
return;
|
||||
}
|
||||
for (SysRiskResp item : dataList) {
|
||||
UriRiskUtils.save(item.getSysType(), item.getData());
|
||||
log.info("初始化[{}]URI风控成功", item.getSysType());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断URI是否风控
|
||||
*
|
||||
* @param sysType 系统类型
|
||||
* @param uri uri
|
||||
* @return 是否风控
|
||||
*
|
||||
*/
|
||||
public boolean risk(String sysType, String uri) {
|
||||
String cache = redisService.get(UriRiskUtils.getKey(sysType), String.class);
|
||||
if (StringUtils.isBlank(cache)) {
|
||||
return false;
|
||||
}
|
||||
String[] arr = cache.split(CP_COMMA);
|
||||
// 匹配uri
|
||||
for (String str : arr) {
|
||||
if (uri.contains(str)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package xtools.app.sys.risk.enums;
|
||||
|
||||
import xtools.app.sys.enums.SysRiskType;
|
||||
import xtools.boot.api.enums.BaseEnum;
|
||||
|
||||
/**
|
||||
* <p>Title : SysRiskBaseEnum</p>
|
||||
* <p>Description : SysRiskBaseEnum</p>
|
||||
* <p>DevelopTools : Idea_x64_v2026.1</p>
|
||||
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
|
||||
* <p>Company : org.xujun</p>
|
||||
*
|
||||
* @author : XuJun
|
||||
* @version : 1.0.0
|
||||
* @date : 2026/4/8 09:37
|
||||
*/
|
||||
public interface SysRiskBaseEnum extends BaseEnum {
|
||||
|
||||
/**
|
||||
* 风控类型
|
||||
*
|
||||
* @return 风控类型
|
||||
*/
|
||||
SysRiskType type();
|
||||
|
||||
/**
|
||||
* 系统类型
|
||||
*
|
||||
* @return 系统类型
|
||||
*/
|
||||
String sysType();
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
package xtools.app.sys.risk.enums;
|
||||
|
||||
import xtools.app.sys.enums.SysRiskType;
|
||||
import xtools.boot.api.enums.BaseEnum;
|
||||
|
||||
/**
|
||||
* <p>Title : SysRiskEnum</p>
|
||||
* <p>Description : SysRiskEnum</p>
|
||||
* <p>DevelopTools : Idea_x64_v2026.1</p>
|
||||
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
|
||||
* <p>Company : org.xujun</p>
|
||||
*
|
||||
* @author : XuJun
|
||||
* @version : 1.0.0
|
||||
* @date : 2026/2/4 16:27
|
||||
*/
|
||||
public enum SysRiskEnum implements SysRiskBaseEnum {
|
||||
|
||||
// 系统IP风控
|
||||
IP(1, "系统IP风控", SysRiskType.IP, "sys-ip");
|
||||
|
||||
/**
|
||||
* 编码
|
||||
*/
|
||||
private final int code;
|
||||
|
||||
/**
|
||||
* 说明
|
||||
*/
|
||||
private final String desc;
|
||||
|
||||
/**
|
||||
* 风控类型
|
||||
*/
|
||||
private final SysRiskType type;
|
||||
|
||||
/**
|
||||
* 系统类型
|
||||
*/
|
||||
private final String sysType;
|
||||
|
||||
/**
|
||||
* 构造函数
|
||||
*
|
||||
* @param code 编码
|
||||
* @param desc 说明
|
||||
* @param type 风控类型
|
||||
* @param sysType 系统类型
|
||||
*/
|
||||
SysRiskEnum(int code, String desc, SysRiskType type, String sysType) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
this.type = type;
|
||||
this.sysType = sysType;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有枚举
|
||||
*
|
||||
* @return 所有枚举
|
||||
*/
|
||||
@Override
|
||||
public BaseEnum[] all() {
|
||||
return values();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取枚举编码
|
||||
*
|
||||
* @return 枚举编码
|
||||
*/
|
||||
@Override
|
||||
public int code() {
|
||||
return code;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取枚举说明
|
||||
*
|
||||
* @return 枚举说明
|
||||
*/
|
||||
@Override
|
||||
public String desc() {
|
||||
return desc;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取风控类型
|
||||
*
|
||||
* @return 风控类型
|
||||
*/
|
||||
@Override
|
||||
public SysRiskType type() {
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取系统类型
|
||||
*
|
||||
* @return 系统类型
|
||||
*/
|
||||
@Override
|
||||
public String sysType() {
|
||||
return sysType;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
package xtools.app.sys.risk.utils;
|
||||
|
||||
import xtools.app.common.cache.enums.AppCache;
|
||||
import xtools.base.config.BaseParams;
|
||||
import xtools.boot.cache.redis.base.RedisService;
|
||||
import xtools.boot.cache.redis.utils.RedisUtils;
|
||||
import xtools.core.ArrUtils;
|
||||
import xtools.core.StringUtils;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* <p>Title : IpRiskUtils</p>
|
||||
* <p>Description : IpRiskUtils</p>
|
||||
* <p>DevelopTools : Idea_x64_v2026.1</p>
|
||||
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
|
||||
* <p>Company : org.xujun</p>
|
||||
*
|
||||
* @author : XuJun
|
||||
* @version : 1.0.0
|
||||
* @date : 2026/4/8 16:29
|
||||
*/
|
||||
public class IpRiskUtils implements BaseParams {
|
||||
|
||||
/**
|
||||
* IP风控缓存
|
||||
*/
|
||||
private final static AppCache IP_RISK = AppCache.RISK_IP;
|
||||
|
||||
/**
|
||||
* 获取缓存kEY
|
||||
*
|
||||
* @param sysType 系统类型
|
||||
* @return 缓存kEY
|
||||
*/
|
||||
public static String getKey(String sysType) {
|
||||
return IP_RISK.key() + sysType;
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加IP风控
|
||||
*
|
||||
* @param sysType 系统类型
|
||||
* @param data IP
|
||||
*/
|
||||
public static void addAll(String sysType, String data) {
|
||||
RedisService redisService = RedisUtils.get();
|
||||
String key = getKey(sysType);
|
||||
if (StringUtils.isBlank(data)) {
|
||||
redisService.del(key);
|
||||
} else {
|
||||
List<String> ipList = ArrUtils.toStringList(data);
|
||||
Map<Object, String> map = ipList.stream().filter(StringUtils::isNotBlank).collect(Collectors.toMap(ip -> ip, ip -> String.valueOf(CP_NUM0)));
|
||||
redisService.del(key);
|
||||
redisService.hashPutAll(key, map);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package xtools.app.sys.risk.utils;
|
||||
|
||||
import xtools.app.common.cache.enums.AppCache;
|
||||
import xtools.base.config.BaseParams;
|
||||
import xtools.boot.cache.redis.base.RedisService;
|
||||
import xtools.boot.cache.redis.utils.RedisUtils;
|
||||
import xtools.core.StringUtils;
|
||||
|
||||
/**
|
||||
* <p>Title : UriRiskUtils</p>
|
||||
* <p>Description : UriRiskUtils</p>
|
||||
* <p>DevelopTools : Idea_x64_v2026.1</p>
|
||||
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
|
||||
* <p>Company : org.xujun</p>
|
||||
*
|
||||
* @author : XuJun
|
||||
* @version : 1.0.0
|
||||
* @date : 2026/4/8 16:32
|
||||
*/
|
||||
public class UriRiskUtils implements BaseParams {
|
||||
|
||||
/**
|
||||
* URI风控缓存
|
||||
*/
|
||||
private final static AppCache URI_RISK = AppCache.RISK_URI;
|
||||
|
||||
/**
|
||||
* 获取缓存kEY
|
||||
*
|
||||
* @param sysType 系统类型
|
||||
* @return 缓存kEY
|
||||
*/
|
||||
public static String getKey(String sysType) {
|
||||
return URI_RISK.key() + sysType;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存Uri风控
|
||||
*
|
||||
* @param sysType 系统类型
|
||||
* @param data 风控数据
|
||||
*/
|
||||
public static void save(String sysType, String data) {
|
||||
String key = getKey(sysType);
|
||||
RedisService redisService = RedisUtils.get();
|
||||
if (StringUtils.isBlank(data)) {
|
||||
redisService.del(key);
|
||||
} else {
|
||||
redisService.set(key, data);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user