专栏首页java思维导图图片验证码的需求分析、优雅实现

图片验证码的需求分析、优雅实现

需求描述

通常我们最登录的时候,为了防止多次尝试或攻击登录接口,我们需要弄一个验证码的功能,只有输入验证码正确的情况下,我们才会去做密码校验,这样就减少了密码可能会被试出来的可能。

需求分析

这个功能设计要点有两个:

第一点、验证码图片的生成

验证码图片的生成使用到io流,网上很多生成验证码的工具,比如说使用awt的Graphics2D 生成的。但如果要调整验证码的个数、样式等那就有点麻烦了。这里给大家介绍一个验证码开源组件com.google.code.kaptcha。可以灵活调整验证码的样式。

第二点、验证码的存储方式

如果只是一个单体项目,可以存在session当中,如果集成了shiro,也可以放shiro的session中。

而在分布式系统当中,需要考虑验证码的共享功能。

1、可以存储在session中,如需要集成spring session,把session存到redis等存储中间件中session验证码共享功能。

2、shiro集成了redis的,就可以存在shiro session当中实现共享。

3、当然,你也可以直接把验证码存到redis等中间件中,不需要通过session,但是key就必须唯一。

伪代码逻辑

  1. 引入com.google.code.kaptcha的pom坐标
  2. 生成验证码的配置信息,配置样式等
  3. 调用producer接口生成验证码和图片,并保存到session中
  4. 使用servlet输出流把验证码图片传到客户端
  5. 校验验证码

建议:可以定义一个验证码开关,开发时候可以关闭验证码功能,提高效率。

代码实现

第一步、导入验证码组件pom包

第二步、生成验证码配置

第三步、生成验证码图片,把验证码存到session中

第四步、校验验证码是否正确

本文分享自微信公众号 - java思维导图(java-mindmap)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-08-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何快速掌握 Github 的开源项目?

    Github 是全球最大的代码托管网站,也是最大的程序员交友网站。我注册 Github 的账号特别早,一直对这个“英文网站”不感冒!直到2018年我才发现 Gi...

    心莱科技雪雁
  • Jmeter&badboy环境搭建

    注:如果电脑没有安装JDK,那么一定要记得,提前安装好JDK,并配置好环境变量哦。

    ITester软件测试小栈
  • 盘一盘 Python 系列特别篇 - 两大利「器」

    本文作为 Python 系列的特别篇第 3 篇,主要介绍 Python 里的两大利「器」,生成器 (generator) 和迭代器 (iterator)。

    用户5753894
  • 创建节约内存的 JavaBean

    每个普通Java对象在堆(heap)中都有一个头信息(object header),头信息是必不可少的,记录着对象的状态。

    一个优秀的废人
  • SpringBoot | 是如何实现自动配置的?

    相信接触过 SpringBoot 的朋友都知道 SpringBoot 有各种 starter 依赖,想要什么直接勾选加进来就可以了。想要自定义的时候就直接在配置...

    一个优秀的废人
  • SpringMVC 工作原理

    DispatcherServlet:作为前端控制器,整个流程控制的中心,控制其它组件执行,统一调度,降低组件之间的耦合性,提高每个组件的扩展性。

    一个优秀的废人
  • 为什么要重写 hashcode 和 equals 方法?

    来源:cnblogs.com/JavaArchitect/p/10474448.html

    一个优秀的废人
  • SpringBoot 填坑 | Shiro 与 Redis 多级缓存问题

    来自不愿意透露姓名的小师弟的第三篇投稿。这篇主要讲了,项目中配置了多缓存遇到的坑,以及解决办法。

    一个优秀的废人
  • SpringBoot 深度调优,让你的项目飞起来!

    关于这些设置的JVM参数是什么意思,请参考第二步中的oracle官方给出的调优文档。

    程序员小明
  • 如何阅读Spring源码

    因为不断有朋友,或留言,或私信,问我Spring源码阅读问题。我本有心回答,但奈何这是一个非三言两语能说清出的事。所以就决定写一篇小文,来分享下我的浅薄经验。

    Java编程指南

扫码关注云+社区

领取腾讯云代金券