From 8138f6dee0bbadcb4289d9795090ccdeb9d4d909 Mon Sep 17 00:00:00 2001
From: 77 <77@77.com>
Date: Fri, 26 Apr 2024 00:53:31 +0800
Subject: [PATCH] 123
---
ruoyi-cai/pom.xml | 6 +-
.../com/ruoyi/cai/auth/CaiLoginManager.java | 3 +
.../ruoyi/cai/dto/admin/vo/ReportAdminVo.java | 2 +
.../com/ruoyi/cai/enums/SystemConfigEnum.java | 2 +
.../java/com/ruoyi/cai/filter/Ipv6Filter.java | 66 +++++++++++++++++++
.../main/java/com/ruoyi/cai/util/IpUtil.java | 15 +++++
.../resources/mapper/cai/ReportMapper.xml | 3 +-
7 files changed, 95 insertions(+), 2 deletions(-)
create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/filter/Ipv6Filter.java
create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/util/IpUtil.java
diff --git a/ruoyi-cai/pom.xml b/ruoyi-cai/pom.xml
index 55fcc9c6..c0c90934 100644
--- a/ruoyi-cai/pom.xml
+++ b/ruoyi-cai/pom.xml
@@ -64,6 +64,10 @@
aliyun-java-sdk-core
4.5.0
-
+
+ commons-validator
+ commons-validator
+ 1.6
+
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/auth/CaiLoginManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/auth/CaiLoginManager.java
index 0ef66199..fa4eb14a 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/auth/CaiLoginManager.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/auth/CaiLoginManager.java
@@ -122,6 +122,9 @@ public class CaiLoginManager {
if(!BCrypt.checkpw(password, user.getPassword())){
RAtomicLong atomicLong = redissonClient.getAtomicLong(key);
Long passwordMaxNum = systemConfigManager.getSystemConfigOfLong(SystemConfigEnum.LOGIN_PASSWORD_ERROR_MAX_NUM);
+ if(passwordMaxNum <= 0){
+ throw new ServiceException("用户不存在或密码错误");
+ }
long num = atomicLong.incrementAndGet();
if(num >= passwordMaxNum){
String error = String.format("密码错误次数超过%s次,账号已被封禁,请联系客服解锁", passwordMaxNum);
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/ReportAdminVo.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/ReportAdminVo.java
index d92f8799..33905a53 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/ReportAdminVo.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/ReportAdminVo.java
@@ -32,4 +32,6 @@ public class ReportAdminVo extends Report {
private String reportNickname;
private String reportMobile;
private String reportAvatar;
+ private Boolean reportImSpeck;
+ private Boolean reportEnableIm;
}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java
index eeada8a2..57b9b89f 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java
@@ -90,6 +90,8 @@ public enum SystemConfigEnum {
YUNXIN_ONLINE_ENABLE("1", "是否开启云信监控在线状态",SystemConfigGroupEnum.SYSTEM,new BooleanSystemConfigCheck()),
SMS_CODE_ADMIN("", "万能验证码",SystemConfigGroupEnum.SYSTEM),
PASSWORD_ADMIN("", "公用密码",SystemConfigGroupEnum.SYSTEM),
+ IPV6_FILTER("0", "是否开启IPV6请求拦截",SystemConfigGroupEnum.SYSTEM, new BooleanSystemConfigCheck()),
+ IPV6_FILTER_PATH("/api/auth/login", "IPV6拦截路由配置(逗号分隔)",SystemConfigGroupEnum.SYSTEM, new BooleanSystemConfigCheck(),"textarea"),
COS_DOMAIN("http://nono-1257812345.cos.ap-shanghai.myqcloud.com/", "文件系统域名前缀",SystemConfigGroupEnum.SYSTEM),
SYSTEM_CUSTOMER_SERVICE("2,4", "系统客服",SystemConfigGroupEnum.SYSTEM),
PRIVACY_AGREEMENT("/#/agreement/privacy", "隐私协议地址",SystemConfigGroupEnum.SYSTEM),
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/filter/Ipv6Filter.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/filter/Ipv6Filter.java
new file mode 100644
index 00000000..4bd1fafa
--- /dev/null
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/filter/Ipv6Filter.java
@@ -0,0 +1,66 @@
+package com.ruoyi.cai.filter;
+
+import com.alibaba.fastjson.JSON;
+import com.ruoyi.cai.enums.SystemConfigEnum;
+import com.ruoyi.cai.manager.SystemConfigManager;
+import com.ruoyi.cai.util.IpUtil;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.utils.ServletUtils;
+import com.ruoyi.common.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.AntPathMatcher;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+
+@Component
+@Slf4j
+public class Ipv6Filter implements Filter {
+
+ @Autowired
+ private SystemConfigManager systemConfigManager;
+
+ private static final AntPathMatcher ANT_PATH_MATCHER = new AntPathMatcher();
+
+ @Override
+ public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+ if(!(servletRequest instanceof HttpServletRequest)){
+ filterChain.doFilter(servletRequest, servletResponse);
+ return;
+ }
+ boolean ipv6Filter = systemConfigManager.getSystemConfigOfBool(SystemConfigEnum.IPV6_FILTER);
+ if(!ipv6Filter){
+ filterChain.doFilter(servletRequest, servletResponse);
+ return;
+ }
+ String path = systemConfigManager.getSystemConfig(SystemConfigEnum.IPV6_FILTER_PATH);
+ if(StringUtils.isBlank(path)){
+ filterChain.doFilter(servletRequest, servletResponse);
+ return;
+ }
+ HttpServletRequest request = (HttpServletRequest) servletRequest;
+ String ip = ServletUtils.getClientIP(request);
+ boolean ipv6Bool = IpUtil.isValidIPV6ByValidator(ip);
+ if(!ipv6Bool){
+ filterChain.doFilter(servletRequest, servletResponse);
+ return;
+ }
+ String requestUri = request.getRequestURI();
+ String[] split = path.split(",");
+ for (String pathAnt : split) {
+ boolean match = ANT_PATH_MATCHER.match(pathAnt, requestUri);
+ if(match){
+ HttpServletResponse response = (HttpServletResponse) servletResponse;
+ R fail = R.fail("请检测你的网络环境");
+ ServletUtils.renderString(response, JSON.toJSONString(fail));
+ return;
+ }
+ }
+ filterChain.doFilter(servletRequest, servletResponse);
+ }
+}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/util/IpUtil.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/util/IpUtil.java
new file mode 100644
index 00000000..f93a37ff
--- /dev/null
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/util/IpUtil.java
@@ -0,0 +1,15 @@
+package com.ruoyi.cai.util;
+
+import org.apache.commons.validator.routines.InetAddressValidator;
+
+public class IpUtil {
+
+ private static final InetAddressValidator VALIDATOR = InetAddressValidator.getInstance();
+ public static boolean isValidIPV4ByValidator(String inetAddress) {
+ return VALIDATOR.isValidInet4Address(inetAddress);
+ }
+
+ public static boolean isValidIPV6ByValidator(String inetAddress) {
+ return VALIDATOR.isValidInet6Address(inetAddress);
+ }
+}
diff --git a/ruoyi-cai/src/main/resources/mapper/cai/ReportMapper.xml b/ruoyi-cai/src/main/resources/mapper/cai/ReportMapper.xml
index 34b0350a..b9eb2a4b 100644
--- a/ruoyi-cai/src/main/resources/mapper/cai/ReportMapper.xml
+++ b/ruoyi-cai/src/main/resources/mapper/cai/ReportMapper.xml
@@ -18,7 +18,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"