SpringSecurity学习之路9-实现验证码功能

本文介绍了一种基于自定义filter的验证码生成及校验方案,通过ImageCode类封装验证码信息,利用随机数生成验证码并存储至session,同时实现验证码过期判断。自定义的OncePerRequestFilter用于集成至SpringSecurity中进行验证码校验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

步骤:

定义一个封装验证码信息的类,ImageCode。

写一个生成验证码的接口,利用随机数生成验证码,并将生成的验证码信息存储进session。

springsecurity是由一系列filter接口来实现的,自定义一个filter继承OncePerRequestFilter,实现校验验证码的逻辑功能。

将这个自定义的filter添加进入springsecurity链中。

 

ImageCode中封装的信息有:

BufferedImage image //生成的验证码图片;

String code //验证码;

LocalDateTime expireTime //验证码的过期时间。

通常是指定一段时间后验证码过期,而不是指定一个具体的时间点说要几点几分过期,所以我在该类的构造方法中加入了一个参数 int expireIn,指定多少秒之后验证码过期。

后期对图片验证码和手机验证码做了重构

 

调用此方法判断验证码是否过期:

验证码的生成代码网上一搜就会有很多,这里不在说了。下面用到了ImageIO类的方法将验证码图片返回至前端页面显示。

自定义一个验证码filter,继承OncePerRequestFilter,重置doFilterInternal方法,在该方法内部实现验证码校验。校验成功就调用filterChain.doFilter(request, response);方法。校验失败,捕获异常,然后直接return,切记不可调用filterChain.doFilter,不然会继续执行后续校验。

自定义filter完成之后,将其添加到SpringSecurity的执行链中去。

这行代码的意思就是,将imageCodeFilter,添加到UsernamePasswordAuthenticationFilter之前执行。

最后别忘了将生成验证码的接口路径放行。 

 

在本篇中,只是对生成验证码的逻辑做一个简明介绍,没有涉及到详细代码,在下一篇中,对图片验证码和手机验证码做一个统一详细介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值