123
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -32,4 +32,6 @@ public class ReportAdminVo extends Report {
|
||||
private String reportNickname;
|
||||
private String reportMobile;
|
||||
private String reportAvatar;
|
||||
private Boolean reportImSpeck;
|
||||
private Boolean reportEnableIm;
|
||||
}
|
||||
|
||||
@@ -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),
|
||||
|
||||
66
ruoyi-cai/src/main/java/com/ruoyi/cai/filter/Ipv6Filter.java
Normal file
66
ruoyi-cai/src/main/java/com/ruoyi/cai/filter/Ipv6Filter.java
Normal 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);
|
||||
}
|
||||
}
|
||||
15
ruoyi-cai/src/main/java/com/ruoyi/cai/util/IpUtil.java
Normal file
15
ruoyi-cai/src/main/java/com/ruoyi/cai/util/IpUtil.java
Normal 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user