项目采用jeeweb框架,要启用shiro登陆的验证码功能,调试总是不经有验证就成功登陆,好不容易实现了验证码非空校验,随便输入也能校验成功,以下简述调试经历,做下笔记,欢迎指正。

分析shiro默认加载配置

Jeeweb 中shiro验证码启用问题

直接开启验证码不再做次数验证

Jeeweb 中shiro验证码启用问题

跟踪发现如下类

RetryLimitHashedCredentialsMatcher中有次数校验,直接去掉、

Jeeweb 中shiro验证码启用问题

接下来

JCaptchaValidateFilter.java

跟踪进来多次发现 验证码关键

JCaptcha.validateResponse(httpServletRequest, httpServletRequest.getParameter(jcaptchaParam));

这里简单交代一下  validateResponsehe 和 hasCaptcha区别,

validateResponse():验证当前请求输入的验证码否正确;并从CaptchaService中删除已经生成的验证码;

hasCaptcha():验证当前请求输入的验证码是否正确;但不从CaptchaService中删除已经生成的验证码(比如Ajax验证时可以使用,防止多次生成验证码);

改造:

Jeeweb 中shiro验证码启用问题

Jeeweb 中shiro验证码启用问题

注意标红处开始是true  不论是否检验成功都直接登陆了,问题找到,改成false 解决。

另还需注意一点:

Jeeweb 中shiro验证码启用问题

验证码名称要统一。

相关文章: