mirror of
				https://github.com/dromara/RuoYi-Vue-Plus.git
				synced 2025-11-04 08:13:44 +08:00 
			
		
		
		
	add 增加验证码开关
This commit is contained in:
		@@ -52,6 +52,12 @@ public class CaptchaController {
 | 
			
		||||
	 */
 | 
			
		||||
	@GetMapping("/captchaImage")
 | 
			
		||||
	public AjaxResult getCode() {
 | 
			
		||||
		Map<String, Object> ajax = new HashMap<>();
 | 
			
		||||
		Boolean enabled = captchaProperties.getEnabled();
 | 
			
		||||
		ajax.put("enabled", enabled);
 | 
			
		||||
		if (!enabled) {
 | 
			
		||||
			return AjaxResult.success(ajax);
 | 
			
		||||
		}
 | 
			
		||||
		// 保存验证码信息
 | 
			
		||||
		String uuid = IdUtil.simpleUUID();
 | 
			
		||||
		String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
 | 
			
		||||
@@ -90,7 +96,6 @@ public class CaptchaController {
 | 
			
		||||
			code = captcha.getCode();
 | 
			
		||||
		}
 | 
			
		||||
		redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
 | 
			
		||||
		Map<String,Object> ajax = new HashMap<>();
 | 
			
		||||
		ajax.put("uuid", uuid);
 | 
			
		||||
		ajax.put("img", captcha.getImageBase64());
 | 
			
		||||
		return AjaxResult.success(ajax);
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,8 @@ ruoyi:
 | 
			
		||||
  addressEnabled: false
 | 
			
		||||
 | 
			
		||||
captcha:
 | 
			
		||||
  # 验证码开关
 | 
			
		||||
  enabled: true
 | 
			
		||||
  # 验证码类型 math 数组计算 char 字符验证
 | 
			
		||||
  type: math
 | 
			
		||||
  # line 线段干扰 circle 圆圈干扰 shear 扭曲干扰
 | 
			
		||||
 
 | 
			
		||||
@@ -12,6 +12,7 @@ import com.ruoyi.common.utils.DateUtils;
 | 
			
		||||
import com.ruoyi.common.utils.MessageUtils;
 | 
			
		||||
import com.ruoyi.common.utils.ServletUtils;
 | 
			
		||||
import com.ruoyi.common.utils.ip.IpUtils;
 | 
			
		||||
import com.ruoyi.framework.config.properties.CaptchaProperties;
 | 
			
		||||
import com.ruoyi.framework.manager.AsyncManager;
 | 
			
		||||
import com.ruoyi.framework.manager.factory.AsyncFactory;
 | 
			
		||||
import com.ruoyi.system.service.ISysUserService;
 | 
			
		||||
@@ -41,7 +42,10 @@ public class SysLoginService
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private RedisCache redisCache;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
	@Autowired
 | 
			
		||||
	private CaptchaProperties captchaProperties;
 | 
			
		||||
 | 
			
		||||
	@Autowired
 | 
			
		||||
    private ISysUserService userService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -55,19 +59,19 @@ public class SysLoginService
 | 
			
		||||
     */
 | 
			
		||||
    public String login(String username, String password, String code, String uuid)
 | 
			
		||||
    {
 | 
			
		||||
        String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
 | 
			
		||||
        String captcha = redisCache.getCacheObject(verifyKey);
 | 
			
		||||
        redisCache.deleteObject(verifyKey);
 | 
			
		||||
        if (captcha == null)
 | 
			
		||||
        {
 | 
			
		||||
            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
 | 
			
		||||
            throw new CaptchaExpireException();
 | 
			
		||||
        }
 | 
			
		||||
        if (!code.equalsIgnoreCase(captcha))
 | 
			
		||||
        {
 | 
			
		||||
            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
 | 
			
		||||
            throw new CaptchaException();
 | 
			
		||||
        }
 | 
			
		||||
		if(captchaProperties.getEnabled()) {
 | 
			
		||||
			String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
 | 
			
		||||
			String captcha = redisCache.getCacheObject(verifyKey);
 | 
			
		||||
			redisCache.deleteObject(verifyKey);
 | 
			
		||||
			if (captcha == null) {
 | 
			
		||||
				AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
 | 
			
		||||
				throw new CaptchaExpireException();
 | 
			
		||||
			}
 | 
			
		||||
			if (!code.equalsIgnoreCase(captcha)) {
 | 
			
		||||
				AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
 | 
			
		||||
				throw new CaptchaException();
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
        // 用户验证
 | 
			
		||||
        Authentication authentication = null;
 | 
			
		||||
        try
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@
 | 
			
		||||
          <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
 | 
			
		||||
        </el-input>
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
      <el-form-item prop="code">
 | 
			
		||||
      <el-form-item prop="code" v-if="captchaEnabled">
 | 
			
		||||
        <el-input
 | 
			
		||||
          v-model="loginForm.code"
 | 
			
		||||
          auto-complete="off"
 | 
			
		||||
@@ -81,7 +81,8 @@ export default {
 | 
			
		||||
        code: [{ required: true, trigger: "change", message: "验证码不能为空" }]
 | 
			
		||||
      },
 | 
			
		||||
      loading: false,
 | 
			
		||||
      redirect: undefined
 | 
			
		||||
      redirect: undefined,
 | 
			
		||||
      captchaEnabled:false
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  watch: {
 | 
			
		||||
@@ -99,8 +100,11 @@ export default {
 | 
			
		||||
  methods: {
 | 
			
		||||
    getCode() {
 | 
			
		||||
      getCodeImg().then(res => {
 | 
			
		||||
        this.codeUrl = "data:image/gif;base64," + res.data.img;
 | 
			
		||||
        this.loginForm.uuid = res.data.uuid;
 | 
			
		||||
        this.captchaEnabled = res.data.enabled;
 | 
			
		||||
        if(res.data.enabled){
 | 
			
		||||
          this.codeUrl = "data:image/gif;base64," + res.data.img;
 | 
			
		||||
          this.loginForm.uuid = res.data.uuid;
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    getCookie() {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user