参数管理支持配置验证码开关
This commit is contained in:
		
							parent
							
								
									c8b66f9b04
								
							
						
					
					
						commit
						7b894da43c
					
				@ -17,6 +17,7 @@ import com.ruoyi.common.core.domain.AjaxResult;
 | 
			
		||||
import com.ruoyi.common.core.redis.RedisCache;
 | 
			
		||||
import com.ruoyi.common.utils.sign.Base64;
 | 
			
		||||
import com.ruoyi.common.utils.uuid.IdUtils;
 | 
			
		||||
import com.ruoyi.system.service.ISysConfigService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 验证码操作处理
 | 
			
		||||
@ -38,13 +39,23 @@ public class CaptchaController
 | 
			
		||||
    // 验证码类型
 | 
			
		||||
    @Value("${ruoyi.captchaType}")
 | 
			
		||||
    private String captchaType;
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysConfigService configService;
 | 
			
		||||
    /**
 | 
			
		||||
     * 生成验证码
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping("/captchaImage")
 | 
			
		||||
    public AjaxResult getCode(HttpServletResponse response) throws IOException
 | 
			
		||||
    {
 | 
			
		||||
        AjaxResult ajax = AjaxResult.success();
 | 
			
		||||
        boolean captchaOnOff = configService.selectCaptchaOnOff();
 | 
			
		||||
        ajax.put("captchaOnOff", captchaOnOff);
 | 
			
		||||
        if (!captchaOnOff)
 | 
			
		||||
        {
 | 
			
		||||
            return ajax;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // 保存验证码信息
 | 
			
		||||
        String uuid = IdUtils.simpleUUID();
 | 
			
		||||
        String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
 | 
			
		||||
@ -78,7 +89,6 @@ public class CaptchaController
 | 
			
		||||
            return AjaxResult.error(e.getMessage());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        AjaxResult ajax = AjaxResult.success();
 | 
			
		||||
        ajax.put("uuid", uuid);
 | 
			
		||||
        ajax.put("img", Base64.encode(os.toByteArray()));
 | 
			
		||||
        return ajax;
 | 
			
		||||
 | 
			
		||||
@ -21,6 +21,7 @@ import com.ruoyi.common.utils.ServletUtils;
 | 
			
		||||
import com.ruoyi.common.utils.ip.IpUtils;
 | 
			
		||||
import com.ruoyi.framework.manager.AsyncManager;
 | 
			
		||||
import com.ruoyi.framework.manager.factory.AsyncFactory;
 | 
			
		||||
import com.ruoyi.system.service.ISysConfigService;
 | 
			
		||||
import com.ruoyi.system.service.ISysUserService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -43,6 +44,9 @@ public class SysLoginService
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysUserService userService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysConfigService configService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 登录验证
 | 
			
		||||
     * 
 | 
			
		||||
@ -54,18 +58,11 @@ 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)
 | 
			
		||||
        boolean captchaOnOff = configService.selectCaptchaOnOff();
 | 
			
		||||
        // 验证码开关
 | 
			
		||||
        if (captchaOnOff)
 | 
			
		||||
        {
 | 
			
		||||
            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();
 | 
			
		||||
            validateCapcha(username, code, uuid);
 | 
			
		||||
        }
 | 
			
		||||
        // 用户验证
 | 
			
		||||
        Authentication authentication = null;
 | 
			
		||||
@ -95,6 +92,31 @@ public class SysLoginService
 | 
			
		||||
        return tokenService.createToken(loginUser);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 校验验证码
 | 
			
		||||
     * 
 | 
			
		||||
     * @param username 用户名
 | 
			
		||||
     * @param code 验证码
 | 
			
		||||
     * @param uuid 唯一标识
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    public void validateCapcha(String username, 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();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 记录登录信息
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
@ -26,6 +26,13 @@ public interface ISysConfigService
 | 
			
		||||
     */
 | 
			
		||||
    public String selectConfigByKey(String configKey);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取验证码开关
 | 
			
		||||
     * 
 | 
			
		||||
     * @return true开启,false关闭
 | 
			
		||||
     */
 | 
			
		||||
    public boolean selectCaptchaOnOff();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询参数配置列表
 | 
			
		||||
     * 
 | 
			
		||||
 | 
			
		||||
@ -80,6 +80,21 @@ public class SysConfigServiceImpl implements ISysConfigService
 | 
			
		||||
        return StringUtils.EMPTY;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取验证码开关
 | 
			
		||||
     * 
 | 
			
		||||
     * @return true开启,false关闭
 | 
			
		||||
     */
 | 
			
		||||
    public boolean selectCaptchaOnOff()
 | 
			
		||||
    {
 | 
			
		||||
        String captchaOnOff = selectConfigByKey("sys.account.captchaOnOff");
 | 
			
		||||
        if (StringUtils.isEmpty(captchaOnOff))
 | 
			
		||||
        {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        return Convert.toBool(captchaOnOff);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询参数配置列表
 | 
			
		||||
     * 
 | 
			
		||||
 | 
			
		||||
@ -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="captchaOnOff">
 | 
			
		||||
        <el-input
 | 
			
		||||
          v-model="loginForm.code"
 | 
			
		||||
          auto-complete="off"
 | 
			
		||||
@ -81,6 +81,7 @@ export default {
 | 
			
		||||
        code: [{ required: true, trigger: "change", message: "验证码不能为空" }]
 | 
			
		||||
      },
 | 
			
		||||
      loading: false,
 | 
			
		||||
      captchaOnOff: true,
 | 
			
		||||
      redirect: undefined
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
@ -99,8 +100,11 @@ export default {
 | 
			
		||||
  methods: {
 | 
			
		||||
    getCode() {
 | 
			
		||||
      getCodeImg().then(res => {
 | 
			
		||||
        this.codeUrl = "data:image/gif;base64," + res.img;
 | 
			
		||||
        this.loginForm.uuid = res.uuid;
 | 
			
		||||
        this.captchaOnOff = res.captchaOnOff === undefined ? true : res.captchaOnOff;
 | 
			
		||||
        if (this.captchaOnOff) {
 | 
			
		||||
          this.codeUrl = "data:image/gif;base64," + res.img;
 | 
			
		||||
          this.loginForm.uuid = res.uuid;
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    getCookie() {
 | 
			
		||||
@ -130,7 +134,9 @@ export default {
 | 
			
		||||
            this.$router.push({ path: this.redirect || "/" }).catch(()=>{});
 | 
			
		||||
          }).catch(() => {
 | 
			
		||||
            this.loading = false;
 | 
			
		||||
            this.getCode();
 | 
			
		||||
            if (this.captchaOnOff) {
 | 
			
		||||
              this.getCode();
 | 
			
		||||
            }
 | 
			
		||||
          });
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
		Reference in New Issue
	
	Block a user