feat: 增加关闭验证码的功能

增加关闭验证码的功能
This commit is contained in:
胡少翔
2024-09-18 10:56:55 +08:00
parent 7a5f4f13e7
commit b00b3c6868
8 changed files with 45 additions and 2 deletions

View File

@@ -28,6 +28,11 @@ public interface RedisConstants {
*/
String IP_QPS_THRESHOLD_LIMIT_KEY = "IP_QPS_THRESHOLD_LIMIT";
/**
* 关闭验证码
*/
String CLOSE_CAPTCHA_KEY = "CLOSE_CAPTCHA";
/**
* 手机验证码缓存前缀
*/

View File

@@ -68,7 +68,7 @@ public class SecurityConfig {
// 限流过滤器
http.addFilterBefore(new RateLimiterFilter(redisTemplate, configService), UsernamePasswordAuthenticationFilter.class);
// 验证码校验过滤器
http.addFilterBefore(new CaptchaValidationFilter(redisTemplate, codeGenerator), UsernamePasswordAuthenticationFilter.class);
http.addFilterBefore(new CaptchaValidationFilter(redisTemplate, codeGenerator,configService), UsernamePasswordAuthenticationFilter.class);
// JWT 校验过滤器
http.addFilterBefore(new JwtValidationFilter(redisTemplate,securityProperties.getJwt().getKey()), UsernamePasswordAuthenticationFilter.class);

View File

@@ -2,9 +2,12 @@ package com.youlai.boot.core.security.filter;
import cn.hutool.captcha.generator.CodeGenerator;
import cn.hutool.core.util.StrUtil;
import com.youlai.boot.common.constant.RedisConstants;
import com.youlai.boot.common.constant.SecurityConstants;
import com.youlai.boot.common.constant.SymbolConstant;
import com.youlai.boot.common.result.ResultCode;
import com.youlai.boot.common.util.ResponseUtils;
import com.youlai.boot.system.service.ConfigService;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
@@ -33,9 +36,12 @@ public class CaptchaValidationFilter extends OncePerRequestFilter {
private final CodeGenerator codeGenerator;
public CaptchaValidationFilter(RedisTemplate<String, Object> redisTemplate, CodeGenerator codeGenerator) {
private final ConfigService configService;
public CaptchaValidationFilter(RedisTemplate<String, Object> redisTemplate, CodeGenerator codeGenerator, ConfigService configService) {
this.redisTemplate = redisTemplate;
this.codeGenerator = codeGenerator;
this.configService = configService;
}
@@ -43,6 +49,11 @@ public class CaptchaValidationFilter extends OncePerRequestFilter {
public void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
// 检验登录接口的验证码
if (LOGIN_PATH_REQUEST_MATCHER.matches(request)) {
// 关闭验证码校验
if (configService.getBooleanConfig(RedisConstants.CLOSE_CAPTCHA_KEY)) {
chain.doFilter(request, response);
return;
}
// 请求中的验证码
String captchaCode = request.getParameter(CAPTCHA_CODE_PARAM_NAME);
// TODO 兼容没有验证码的版本(线上请移除这个判断)

View File

@@ -1,11 +1,13 @@
package com.youlai.boot.module.auth.controller;
import com.youlai.boot.common.constant.RedisConstants;
import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.common.result.Result;
import com.youlai.boot.module.auth.service.AuthService;
import com.youlai.boot.system.model.dto.CaptchaResult;
import com.youlai.boot.system.model.dto.LoginResult;
import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.system.service.ConfigService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -27,6 +29,7 @@ import org.springframework.web.bind.annotation.*;
public class AuthController {
private final AuthService authService;
private final ConfigService configService;
@Operation(summary = "登录")
@PostMapping("/login")
@@ -54,4 +57,9 @@ public class AuthController {
return Result.success(captcha);
}
@Operation(summary = "获取是否关闭验证码")
@GetMapping("/captcha/unable")
public Result<Boolean> isCaptchaEnable() {
return Result.success(configService.getBooleanConfig(RedisConstants.CLOSE_CAPTCHA_KEY));
}
}

View File

@@ -65,4 +65,10 @@ public interface ConfigService extends IService<Config> {
*/
Object getSystemConfig(String key);
/**
* 获取系统配置
* @param key 配置键
* @return 配置值
*/
boolean getBooleanConfig(String key);
}

View File

@@ -159,4 +159,15 @@ public class ConfigServiceImpl extends ServiceImpl<ConfigMapper, Config> impleme
return null;
}
/**
* 获取系统配置
* @param key 配置键
* @return 配置值
*/
@Override
public boolean getBooleanConfig(String key) {
Object systemConfig = getSystemConfig(key);
return systemConfig != null && Boolean.parseBoolean(systemConfig.toString());
}
}