前言
ruoyi 4.6.0验证码
若依(ruoyi)中自带了个验证码功能。
验证码URL
http://xxx/{servlet.context-path}/captcha/captchaImage?type=math&s={random}
http://xxx/{servlet.context-path}/captcha/captchaImage?type=char&s={random}
Controller
com.ruoyi.web.controller.system.SysCaptchaController
检查验证码的Filter
com.ruoyi.framework.shiro.web.filter.captcha.CaptchaValidateFilter
哪些路径检查验证码
在com.ruoyi.framework.config.ShiroConfig
类的shiroFilterFactoryBean
方法中配置。
先注册 CaptchaValidateFilter
@Beanpublic ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager, EhCacheManager ehCacheManager, OnlineWebSessionManager sessionManager){ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();...Map<String, Filter> filters = new LinkedHashMap<String, Filter>();...filters.put("captchaValidate", captchaValidateFilter());...shiroFilterFactoryBean.setFilters(filters);...return shiroFilterFactoryBean;}public CaptchaValidateFilter captchaValidateFilter(){CaptchaValidateFilter captchaValidateFilter = new CaptchaValidateFilter();captchaValidateFilter.setCaptchaEnabled(captchaEnabled);captchaValidateFilter.setCaptchaType(captchaType);return captchaValidateFilter;}
配置需要检查验证码的路径
@Beanpublic ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager, EhCacheManager ehCacheManager, OnlineWebSessionManager sessionManager){ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();...LinkedHashMap<String, String> filterChainDefinitionMap = new LinkedHashMap<>();.../*验证码URL需要匿名访问*/filterChainDefinitionMap.put("/captcha/captchaImage**", "anon");/*登录URL需要匿名访问且检查验证码*/filterChainDefinitionMap.put("/login", "anon,captchaValidate");/*注册URL需要匿名访问且检查验证码*/filterChainDefinitionMap.put("/register", "anon,captchaValidate");...shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);...return shiroFilterFactoryBean;}public CaptchaValidateFilter captchaValidateFilter(){CaptchaValidateFilter captchaValidateFilter = new CaptchaValidateFilter();captchaValidateFilter.setCaptchaEnabled(captchaEnabled);captchaValidateFilter.setCaptchaType(captchaType);return captchaValidateFilter;}