图片验证码进行认证验证码是否正确。

  • 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) // 登录验证码校验过滤器;}
}

自定义图片验证码认证过滤器相关推荐

  1. Day239.RBAC模式、动态加载用户权限资源规则数据规则、【记住我】注销多次登录图片验证码session验证码验证功能 -springsecurity-jwt-oauth2

    1.RBAC权限管理模型 一.RBAC权限模型简介 RBAC权限模型(Role-Based Access Control)即:基于角色的权限控制.模型中有几个关键的术语: 用户:系统接口及功能访问的操 ...

  2. 【Spring Security OAuth2笔记系列】- spring security - 图片验证码

    图片验证码 在登录界面图形添加验证码 开发生成图像验证码接口 在认证流程中加入图像验证码校验 重构代码 开发生成图像验证码接口 思路: * 根据随机数生成图片 * 将随机数存到session中 * 将 ...

  3. Spring Boot整合Shiro + JSP教程(用户认证,权限管理,图片验证码)

    在此首先感谢**编程不良人**up主提供的视频教程 代码都是跟着up的视频敲的,遇到的一些问题也是通过CSDN博主提供的教程解决的,在此也感谢那些提供bug解决方案的前辈们~ 项目完整代码已经发布到g ...

  4. springsecurity自定义短信验证码认证登录流程

    文章目录 前言 验证码存储我们采用redis作为缓存 (注意,这里为了测试方便改为手动设置验证码) 经过上面接口,验证码已经存入到redis中,下面开始认证流程 自定义SmsCodeAuthentic ...

  5. Django 六——自定义标签、图片验证码、发送邮件、评论树、组合搜索

    1.自定义标签 2.图片验证码 3.生成邮箱验证码.发送邮件 4.评论树实现 5.组合搜索(Q) 1.自定义标签 配置: a.在app中新建文件夹  templatetags,里面新建  xx.py文 ...

  6. 1. 爬虫之Beautifulsoup解析库在线解析图片验证码

    1. 解析库beautifulsoup 1.1 介绍 BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库. 官方文档: https://www.crummy.com/ ...

  7. Shiro安全框架(Shiro与SpringBoot整合开发)之图片验证码(五)

    这篇博文主要讲解实现图片验证码的实现,之前已经将权限,认证,自带缓存,redis缓存,都实现了,现在我们就来了解一下简单的图片验证码的实现: 首先,我们要来修改一下登录的页面,login.jsp这个页 ...

  8. SpringSecurity+Vue:实现添加登录图片验证码

    第一步,准备一个可以生成验证码的类或者jar包,我这里就用工具类了,网上随便找的一个工具类 /*** 生成图片验证码的工具类*/ public class VerifyCode {private in ...

  9. SpringSecurity添加图形验证码认证功能

    SpringSecurity添加图形验证码认证功能 第一步:图形验证码接口 1.使用第三方的验证码生成工具Kaptcha https://github.com/penggle/kaptcha @Con ...

最新文章

  1. GitHub 标星 7k+,面试官的灵魂 50 问,问到你怀疑人生!
  2. 《我想进大厂》之JVM夺命连环10问
  3. ios5 中文键盘高度变高覆盖现有ui问题的解决方案(获取键盘高度的方法)
  4. 比CRUD多一点儿(三):UPDATE、DELETE语句
  5. 3.6 判断两个链表是否相交
  6. Cordova for iOS[ PhoneGap]
  7. python页面自动化测试代码覆盖率_Python项目在Jenkins中的自动化测试实践(语法检查、单元测试,coverage(代码覆盖率)、自动打包)...
  8. 【译】Using Objects to Organize Your Code
  9. hive sql练习_经典的SparkSQL/Hive-SQL/MySQL面试-练习题
  10. 命令行导出数据mysql数据库_MySQL命令行导出数据库
  11. NHibernate 3.3
  12. 基于Taro开发小程序笔记--04路由跳转的几种方式
  13. linux命令 三大利器,awk、grep、sed是linux操作文本的三大利器,也是必须掌握的linux命令之一...
  14. 看似无聊的python小游戏 我却摸鱼上班玩了一下午!!
  15. 《程序设计技术》第二章例程
  16. 悦读上品 得乎益友
  17. (X)HTML Strict 下的嵌套规则
  18. 微信小程序腾讯云实时语音转写
  19. #英语# 表示人的名词后缀论文文献
  20. 嵌入式Linux设备驱动程序开发指南18(IIO子系统(二)具有硬件触发功能的IIO子系统ADC模块)——读书笔记

热门文章

  1. 2014年acm亚洲区域赛·鞍山站
  2. 菜鸟涂鸦作品展_No.4
  3. 小菜的CLR之旅(1)
  4. 51Nod 1050 循环数组最大子段和
  5. Centos 7安装与配置chef
  6. zigbee cc2530 adc转换
  7. VirtualBox 安装失败的主要原因 不是正版的OS,系统主题需要还原
  8. 【MyEclips】“Could not create the view: An unexpected exception was thrown”错误解决
  9. HDU 4634 Swipe Bo(搜索)
  10. 每周一个 Python 模块 | calendar