自定义图片验证码认证过滤器
图片验证码进行认证验证码是否正确。
- CaptchaFilter
/*** 图片验证码校验过滤器,在登录过滤器前*/
@Slf4j
@Component
public class CaptchaFilter extends OncePerRequestFilter {private final String loginUrl = "/login";@AutowiredRedisUtil redisUtil;@AutowiredLoginFailureHandler loginFailureHandler;@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)throws ServletException, IOException {String url = request.getRequestURI();if (loginUrl.equals(url) && request.getMethod().equals("POST")) {log.info("获取到login链接,正在校验验证码 -- " + url);try {validate(request);} catch (CaptchaException e) {log.info(e.getMessage());// 交给登录失败处理器处理loginFailureHandler.onAuthenticationFailure(request, response, e);}}filterChain.doFilter(request, response);}private void validate(HttpServletRequest request) {String code = request.getParameter("code");String token = request.getParameter("token");if (StringUtils.isBlank(code) || StringUtils.isBlank(token)) {throw new CaptchaException("验证码不能为空");}if(!code.equals(redisUtil.hget(Const.captcha_KEY, token))) {throw new CaptchaException("验证码不正确");}// 一次性使用redisUtil.hdel(Const.captcha_KEY, token);}
}
上面代码中,因为验证码需要存储,所以添加了RedisUtil工具类,这个工具类代码我们就不贴出来了。
- com.leon.util.RedisUtil
然后验证码出错的时候我们返回异常信息,这是一个认证异常,所以我们自定了一个CaptchaException:
- com.javacat.common.exception.CaptchaException
public class CaptchaException extends AuthenticationException {public CaptchaException(String msg) {super(msg);}
}
- com.leon.common.lang.Const
public class Const {public static final String captcha_KEY = "captcha";
}
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@AutowiredLoginFailureHandler loginFailureHandler;@AutowiredCaptchaFilter captchaFilter;public static final String[] URL_WHITELIST = {"/webjars/**","/favicon.ico","/captcha","/login","/logout",};@Overrideprotected void configure(HttpSecurity http) throws Exception {http.cors().and().csrf().disable().formLogin().failureHandler(loginFailureHandler).and().authorizeRequests().antMatchers(URL_WHITELIST).permitAll() //白名单.anyRequest().authenticated()// 不会创建 session.and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().addFilterBefore(captchaFilter, UsernamePasswordAuthenticationFilter.class) // 登录验证码校验过滤器;}
}
自定义图片验证码认证过滤器相关推荐
- Day239.RBAC模式、动态加载用户权限资源规则数据规则、【记住我】注销多次登录图片验证码session验证码验证功能 -springsecurity-jwt-oauth2
1.RBAC权限管理模型 一.RBAC权限模型简介 RBAC权限模型(Role-Based Access Control)即:基于角色的权限控制.模型中有几个关键的术语: 用户:系统接口及功能访问的操 ...
- 【Spring Security OAuth2笔记系列】- spring security - 图片验证码
图片验证码 在登录界面图形添加验证码 开发生成图像验证码接口 在认证流程中加入图像验证码校验 重构代码 开发生成图像验证码接口 思路: * 根据随机数生成图片 * 将随机数存到session中 * 将 ...
- Spring Boot整合Shiro + JSP教程(用户认证,权限管理,图片验证码)
在此首先感谢**编程不良人**up主提供的视频教程 代码都是跟着up的视频敲的,遇到的一些问题也是通过CSDN博主提供的教程解决的,在此也感谢那些提供bug解决方案的前辈们~ 项目完整代码已经发布到g ...
- springsecurity自定义短信验证码认证登录流程
文章目录 前言 验证码存储我们采用redis作为缓存 (注意,这里为了测试方便改为手动设置验证码) 经过上面接口,验证码已经存入到redis中,下面开始认证流程 自定义SmsCodeAuthentic ...
- Django 六——自定义标签、图片验证码、发送邮件、评论树、组合搜索
1.自定义标签 2.图片验证码 3.生成邮箱验证码.发送邮件 4.评论树实现 5.组合搜索(Q) 1.自定义标签 配置: a.在app中新建文件夹 templatetags,里面新建 xx.py文 ...
- 1. 爬虫之Beautifulsoup解析库在线解析图片验证码
1. 解析库beautifulsoup 1.1 介绍 BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库. 官方文档: https://www.crummy.com/ ...
- Shiro安全框架(Shiro与SpringBoot整合开发)之图片验证码(五)
这篇博文主要讲解实现图片验证码的实现,之前已经将权限,认证,自带缓存,redis缓存,都实现了,现在我们就来了解一下简单的图片验证码的实现: 首先,我们要来修改一下登录的页面,login.jsp这个页 ...
- SpringSecurity+Vue:实现添加登录图片验证码
第一步,准备一个可以生成验证码的类或者jar包,我这里就用工具类了,网上随便找的一个工具类 /*** 生成图片验证码的工具类*/ public class VerifyCode {private in ...
- SpringSecurity添加图形验证码认证功能
SpringSecurity添加图形验证码认证功能 第一步:图形验证码接口 1.使用第三方的验证码生成工具Kaptcha https://github.com/penggle/kaptcha @Con ...
最新文章
- GitHub 标星 7k+,面试官的灵魂 50 问,问到你怀疑人生!
- 《我想进大厂》之JVM夺命连环10问
- ios5 中文键盘高度变高覆盖现有ui问题的解决方案(获取键盘高度的方法)
- 比CRUD多一点儿(三):UPDATE、DELETE语句
- 3.6 判断两个链表是否相交
- Cordova for iOS[ PhoneGap]
- python页面自动化测试代码覆盖率_Python项目在Jenkins中的自动化测试实践(语法检查、单元测试,coverage(代码覆盖率)、自动打包)...
- 【译】Using Objects to Organize Your Code
- hive sql练习_经典的SparkSQL/Hive-SQL/MySQL面试-练习题
- 命令行导出数据mysql数据库_MySQL命令行导出数据库
- NHibernate 3.3
- 基于Taro开发小程序笔记--04路由跳转的几种方式
- linux命令 三大利器,awk、grep、sed是linux操作文本的三大利器,也是必须掌握的linux命令之一...
- 看似无聊的python小游戏 我却摸鱼上班玩了一下午!!
- 《程序设计技术》第二章例程
- 悦读上品 得乎益友
- (X)HTML Strict 下的嵌套规则
- 微信小程序腾讯云实时语音转写
- #英语# 表示人的名词后缀论文文献
- 嵌入式Linux设备驱动程序开发指南18(IIO子系统(二)具有硬件触发功能的IIO子系统ADC模块)——读书笔记
热门文章
- 2014年acm亚洲区域赛·鞍山站
- 菜鸟涂鸦作品展_No.4
- 小菜的CLR之旅(1)
- 51Nod 1050 循环数组最大子段和
- Centos 7安装与配置chef
- zigbee cc2530 adc转换
- VirtualBox 安装失败的主要原因 不是正版的OS,系统主题需要还原
- 【MyEclips】“Could not create the view: An unexpected exception was thrown”错误解决
- HDU 4634 Swipe Bo(搜索)
- 每周一个 Python 模块 | calendar