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"