第一篇是纯利用现有JDK提供的绘图类(ImageIO)类制作,这个过程比较复杂且需要了解ImageIO类。

这一篇文章是利用Hutool工具类来实现的,该工具类已经封装验证码所需的相关类等,使用起来较为简单和方便。

Hutool工具类介绍

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。

Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;

  • Web开发
  • 与其它框架无耦合
  • 高度可替换

Hutool官方网站:https://hutool.cn/

Hutool实现验证码生成

利用Hutool实现验证码校验,校验的Servlet与今天的第一篇是一样的,唯一就是验证码的生成是不一样的。利用Hutool生成验证码更快捷。

获取Hutool:

生成验证码:

设置验证码长、宽、验证码字符数、干扰元素个数:

  1. LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(100,30,4,25);

在页面显示验证码及保存验证码内容到Session:

  1. try{
  2. lineCaptcha.write(response.getOutputStream());
  3. String code = lineCaptcha.getCode();//获取验证码内容
  4. request.getSession().setAttribute("piccode",code);
  5. response.getOutputStream().close();
  6. }catch (IOException e){
  7. e.printStackTrace();
  8. }

这个就实现了验证码的生成,相比于第一篇自己制作简洁了许多。

完整代码:

ImageGenerate.java

  1. public class ImageGenerate extends HttpServlet {
  2. public void doGet (HttpServletRequest request,HttpServletResponse response) {
  3. LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(100,30,4,25);
  4. response.setContentType("image/jpeg");
  5. response.setHeader("Pragma", "No-cache");
  6. try{
  7. lineCaptcha.write(response.getOutputStream());
  8. String code = lineCaptcha.getCode();
  9. request.getSession().setAttribute("piccode",code);
  10. response.getOutputStream().close();
  11. }catch (IOException e){
  12. e.printStackTrace();
  13. }
  14. }
  15. }

测试验证码生成

还是需要先配置web.xml文件:

  1. <servlet>
  2. <servlet-name>ImageGenerate</servlet-name>
  3. <servlet-class>com.kailong.servlet.ImageGenerate</servlet-class>
  4. </servlet>
  5. <servlet-mapping>
  6. <servlet-name>ImageGenerate</servlet-name>
  7. <url-pattern>/imageGenerate</url-pattern>
  8. </servlet-mapping>

其他样式的验证码

上面展示的验证码是线段干扰样式的验证码,Hutool工具类还提供了其他样式的验证码:

  1. CircleCaptcha -圆圈干扰验证码

例:

  1. //定义图形验证码的长、宽、验证码字符数、干扰元素个数
  2. CircleCaptcha captcha = CaptchaUtil.createCircleCaptcha(200, 100, 4, 20);
  3. try{
  4. lineCaptcha.write(response.getOutputStream());
  5. String code = lineCaptcha.getCode();//获取验证码内容
  6. request.getSession().setAttribute("piccode",code);
  7. response.getOutputStream().close();
  8. }catch (IOException e){
  9. e.printStackTrace();
  10. }
  1. ShearCaptcha 扭曲干扰验证码

例:

  1. //定义图形验证码的长、宽、验证码字符数、干扰线宽度
  2. ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(200, 100, 4, 4);
  3. try{
  4. lineCaptcha.write(response.getOutputStream());
  5. String code = lineCaptcha.getCode();//获取验证码内容
  6. request.getSession().setAttribute("piccode",code);
  7. response.getOutputStream().close();
  8. }catch (IOException e){
  9. e.printStackTrace();
  10. }
  1. Hutool还提供了自定义验证码

有时候标准的验证码不满足要求,比如我们希望使用纯字母的验证码、纯数字的验证码、加减乘除的验证码,此时我们就要自定义CodeGenerator

例:

  1. // 自定义纯数字的验证码(随机4位数字,可重复)
  2. RandomGenerator randomGenerator = new RandomGenerator("0123456789", 4);
  3. LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100);
  4. lineCaptcha.setGenerator(randomGenerator);
  5. // 重新生成code
  6. lineCaptcha.createCode();
  1. ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(200, 45, 4, 4);
  2. // 自定义验证码内容为四则运算方式
  3. captcha.setGenerator(new MathGenerator());
  4. // 重新生成code
  5. captcha.createCode();

公众号本文地址:https://mp.weixin.qq.com/s/XHucabQ_WwUx2OMDGSTMkw

头条本文地址:https://www.toutiao.com/item/7154266494900191757/

欢迎关注公众号:愚生浅末

利用Hutool-(Java工具类)实现验证码校验的更多相关文章

  1. hutool JAVA 工具类

    https://hutool.cn/docs/#/ 入门和安装 A set of tools that keep Java sweet. -- 主页:https://hutool.cn/ | http ...

  2. Java工具类——通过配置XML验证Map

    Java工具类--通过配置XML验证Map 背景 在JavaWeb项目中,接收前端过来的参数时通常是使用我们的实体类进行接收的.但是呢,我们不能去决定已经搭建好的框架是怎么样的,在我接触的框架中有一种 ...

  3. java工具类(二)之java正则表达式表单验证

    java正则表达式表单验证类工具类(验证邮箱.手机号码.qq号码等) 这篇文章主要介绍了java使用正则表达式进行表单验证工具类,可以验证邮箱.手机号码.qq号码等方法,需要的朋友可以参考下. jav ...

  4. java工具类系列 (四.SerializationUtils)

    java工具类系列 (四.SerializationUtils) SerializationUtils该类为序列化工具类,也是lang包下的工具,主要用于序列化操作 import java.io.Se ...

  5. 排名前 16 的 Java 工具类

    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...

  6. 排名前16的Java工具类

    原文:https://www.jianshu.com/p/9e937d178203 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法 ...

  7. 第一章 Java工具类目录

    在这一系列博客中,主要是记录在实际开发中会常用的一些Java工具类,方便后续开发中使用. 以下的目录会随着后边具体工具类的添加而改变. 浮点数精确计算 第二章 Java浮点数精确计算 crc32将任意 ...

  8. java工具类之按对象中某属性排序

    import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang ...

  9. 干货:排名前16的Java工具类

    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...

随机推荐

  1. Yii项目知识搜集

    [['rId','advertiser_id','image_file'], 'unique','targetAttribute'=>['rId','advertiser_id','image_ ...

  2. 聚是一团火散作满天星,前端Vue.js+elementUI结合后端FastAPI实现大文件分片上传

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_175 分片上传并不是什么新概念,尤其是大文件传输的处理中经常会被使用,在之前的一篇文章里:python花式读取大文件(10g/50 ...

  3. 基于.NET6、FreeSql、若依UI、LayUI、Bootstrap构建插件式的CMS

    近几年,.net生态日益强大,特别是跨平台技术,性能提升,那真的是强大无比.为了日常能够快速开发,笔者基于基于.NET6.FreeSql.若依UI.LayUI.Bootstrap构建插件式的CMS,请 ...

  4. java的stream让我灵光一现

    说实话,我是一个到了退役也没有搞明白C++的istream和ostream的. 刚开始的时候我把<iostream>直接拆解成ios和tream 真,果粉暴露 退役之后划水,倒是从java ...

  5. Luogu1502 窗口的星星 (线段树扫描线)

    将每个点拓展为矩形,将\(y\)离散,延\(x\)轴扫描,每次更新最值 用了一百年的pushdown操作疑似有问题,亦或这道题特殊,我乱改了pushdown位置就过了,我能怎么办,WA了一发,y数组没 ...

  6. java-servlet-EL表达式和java标签

    1      Servlet线程安全问题 1st.              为什么说servlet会有线程安全问题? 容器默认情况下,对于某个servlet,只会创建一个实例. 容器收到一个请求,就 ...

  7. 「2020-2021 集训队作业」Yet Another Linear Algebra Problem(行列式,Binet-Cauchy 公式)

    题面 出题人:T L Y \tt TLY TLY 太阳神:Tiw_Air_OAO 「 2020 - 2021 集 训 队 作 业 」 Y e t A n o t h e r L i n e a r A ...

  8. Stringboot中@Autowired加了static就属性值就为null

    //错误 @Autowired private static DepartmentDao departmentDao; @Autowired注入,将bean注入进来 @Autowired通过sprin ...

  9. Docker问题:"docker build" requires exactly 1 argument.

    今天在搭建Docker私有仓库的时候.提示错误:"docker build" requires exactly 1 argument. 原因是因为(少了一个 '.' , '.' 代 ...

  10. MySQL5.7.35的安装

    Step①: 下载安装包,MySQL下载地址:百度 Step②: 解压至你的安装路径,我个人是在E盘存放.  Step③: 配置环境变量. ①:在系统属性中,点击环境变量. ②:找到环境变量-> ...