This commit is contained in:
77
2024-04-26 00:53:31 +08:00
parent d771783812
commit 8138f6dee0
7 changed files with 95 additions and 2 deletions

View File

@@ -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);

View File

@@ -32,4 +32,6 @@ public class ReportAdminVo extends Report {
private String reportNickname;
private String reportMobile;
private String reportAvatar;
private Boolean reportImSpeck;
private Boolean reportEnableIm;
}

View File

@@ -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),

View File

@@ -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<Void> fail = R.fail("请检测你的网络环境");
ServletUtils.renderString(response, JSON.toJSONString(fail));
return;
}
}
filterChain.doFilter(servletRequest, servletResponse);
}
}

View File

@@ -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);
}
}

View File

@@ -18,7 +18,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="pageAdmin" resultType="com.ruoyi.cai.dto.admin.vo.ReportAdminVo">
select t1.*,
t2.usercode,t2.nickname,t2.mobile,t2.avatar,t2.gender,t2.age,
t3.usercode as report_usercode,t3.nickname as report_nickname,t3.mobile as report_mobile,t3.avatar as report_avatar,t3.gender as report_gender,t3.age as report_age
t3.usercode as report_usercode,t3.nickname as report_nickname,t3.mobile as report_mobile,t3.avatar as report_avatar,t3.gender as report_gender,t3.age as report_age,
t3.im_speck as report_im_speck,t3.enable_im as report_enable_im
from cai_report t1
left join cai_user t2 on t1.user_id = t2.id
left join cai_user t3 on t1.report_uid = t3.id