使用开源软件kaptcha实现登录验证码功能


使用开源软件kaptcha实现登录验证码功能

本号之前的文章中,已经为大家介绍了实现验证码登陆的多种方式及其实现原理,此文就来具体的实现一下。如果您对实现原理不是很清楚建议您先看本号的前一篇文章。

为了照顾大多数移动端观看的朋友,所有的代码全以图片的形式放置。需要源码的同学可以单独cue我!图片可放大!!!本号只输出干货,期待您的关注、转发!您的支持是我不竭的创作动力!

一、验证码生成之配置使用kaptcha

使用google开源的验证码实现类库kaptcha,通过maven坐标引入


图片:验证码生成之配置使用kaptcha


  • 假设我们的配置文件是application.yml,新建一个单独的文件叫做kaptcha.properties。因为kaptcha的配置不符合yaml的规范格式,所以只能采用properties。需配合注解PropertySourc使用。

  • 假设我们的配置文件是application.properties,将下面这段代码加入进去即可,不用单独建立文件。

  • 下面的验证码配置,从英文单词的角度很容易理解,当我们需要调整验证码的边框、颜色、大小、字体等属性的时候,可以修改这些配置。

kaptcha.border=no
kaptcha.border.color=105,179,90
kaptcha.image.width=100
kaptcha.image.height=45
kaptcha.session.key=code
kaptcha.textproducer.font.color=blue
kaptcha.textproducer.font.size=35
kaptcha.textproducer.char.length=4
kaptcha.textproducer.font.names=宋体,楷体,微软雅黑

下面的代码加载了配置文件中的kaptcha配置(参考Spring Boot的配置加载),如果是独立的properties文件,需加上PropertySource注解说明。
另外,我们通过加载完成的配置,初始化captchaProducer的Spring Bean,用于生成验证码。


图片:kaptcha配置初始化


至此,Kaptcha开源验证码软件的配置我们就完成了,如果发现IDEA环境下配置文件读取中文乱码,修改如下配置。

IDEA解决properties配置乱码问题

二、验证码生成之session保存

生成验证码的Controller。同时需要开放路径"/kaptcha"的访问权限,配置成不需登录也无需任何权限即可访问的路径。如何进行配置,笔者之前的文章已经讲过了。

  • 通过captchaProducer.createText()生成验证码文字,并和失效时间一起保存到CaptchaImageVO中。

  • 将CaptchaImageVO验证码信息类对象,保存到session中。(这个类的代码后文有介绍)

  • 通过captchaProducer.createImage(capText)生成验证码图片,并通过ServletOutputStream返回给前端


图片:生成验证码的Controller


我们要把CaptchaImageVO保存到session里面。所以该类中不要加图片,只保存验证码文字和失效时间,用于后续验证即可。把验证码图片保存起来既没有用处,又浪费内存。


图片:保存验证码的实体


三、验证码用户访问

把如下代码加入到登录页面合适的位置,注意图片img标签放到登录表单中。


图片:验证码登陆页面


  • 实现的效果是,页面初始化即加载验证码。以后每一次点击,都会更新验证码。

  • 注意:一定设置width和height,否则图片无法显示。

四、验证码之Spring Security校验

图片:验证码过滤器在Spring Security过滤器链中的位置

  • 编写我们的自定义图片验证码过滤器VerificationCodeFilter,过滤器中拦截登录请求

  • VerificationCodeFilter过滤器中从seesion获取验证码文字与用户输入比对,比对通过执行其他过滤器链

  • 比对不通过,自定义一个异常,交给AuthenticationFailureHandler处理

  • 最后将VerificationCodeFilter放在UsernamePasswordAuthenticationFilter表单过滤器之前执行。

以上是在Spring Security实现登录验证码验证的逻辑。如果你是使用的shiro或者其他的自定义的登录验证实现,那就更简单了。就在你的登录验证的controller里面取出session比对验证码即可,不需要自定义过滤器。

推荐:SpringBoot系列精品文章(16章97节), http://springboot.zimug.com 
本号只做持续的知识输出,希望您能关注、评论、转发!您的支持是我不竭的创作动力!让知识产生价值、让程序员改变世界!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容