项目采用jeeweb框架,要启用shiro登陆的验证码功能,调试总是不经有验证就成功登陆,好不容易实现了验证码非空校验,随便输入也能校验成功,以下简述调试经历,做下笔记,欢迎指正。
分析shiro默认加载配置
直接开启验证码不再做次数验证
跟踪发现如下类
RetryLimitHashedCredentialsMatcher中有次数校验,直接去掉、
接下来
JCaptchaValidateFilter.java
跟踪进来多次发现 验证码关键
JCaptcha.validateResponse(httpServletRequest, httpServletRequest.getParameter(jcaptchaParam));
这里简单交代一下 validateResponsehe 和 hasCaptcha区别,
validateResponse():验证当前请求输入的验证码否正确;并从CaptchaService中删除已经生成的验证码;
hasCaptcha():验证当前请求输入的验证码是否正确;但不从CaptchaService中删除已经生成的验证码(比如Ajax验证时可以使用,防止多次生成验证码);
改造:
注意标红处开始是true 不论是否检验成功都直接登陆了,问题找到,改成false 解决。
另还需注意一点:
验证码名称要统一。