springboot验证码的生成与验证的两种方法
目录
- 前言
- 效果一览(单击图片刷新验证码)
- 一、使用整合kaptcha方式实现验证码生成与验证
- 二、使用hutool-captcha方式实现验证码生成与验证
前言 在springboot的登陆页面中为了防止机器大规模注册,机器暴力破解数据密码等危害,需要验证随机生成的验证码。现提出两种简易方案生成验证码功能,一种采用springboot整合kaptcha第三方验证码生成工具的生成方案;另一种采用springboot整合第三方类库hutool生成验证码,验证成功跳转至success页面,失败则跳转false页面。基本实现方案如下:
效果一览(单击图片刷新验证码)
文章图片
一、使用整合kaptcha方式实现验证码生成与验证 kaptcha是一个可高度适配的使用验证码生成工具,Kaptcha详细配置表如下:
参考博客:Kaptcha
Constant | description | default |
---|---|---|
kaptcha.border | 图片边框,合法值:yes,no | yes |
kaptcha.border.color | 边框颜色,合法值: r,g,b (and optional alpha) 或者 white,black,blue. | black |
kaptcha.image.width | 图片宽 | 200 |
kaptcha.image.height | 图片高 | 50 |
kaptcha.producer.impl | 图片实现类 | com.google.code.kaptcha.impl.DefaultKaptcha |
kaptcha.textproducer.impl | 文本实现类 | com.google.code.kaptcha.text.impl.DefaultTextCreator |
kaptcha.textproducer.char.string | 文本集合,验证码值从此集合中获取 | abcde2345678gfynmnpwx |
kaptcha.textproducer.char.length | 验证码长度 | 5 |
kaptcha.textproducer.font.names | 字体 | Arial, Courier |
kaptcha.textproducer.font.size | 字体大小 | 40px. |
kaptcha.textproducer.font.color | 字体颜色,合法值: r,g,b 或者 white,black,blue. | black |
kaptcha.textproducer.char.space | 文字间隔 | 2 |
kaptcha.noise.impl | 干扰实现类 | com.google.code.kaptcha.impl.DefaultNoise |
kaptcha.noise.color | 干扰 颜色,合法值: r,g,b 或者 white,black,blue. | black |
kaptcha.obscurificator.impl | 图片样式: 水纹 com.google.code.kaptcha.impl.WaterRipple 鱼眼 com.google.code.kaptcha.impl.FishEyeGimpy 阴影 com.google.code.kaptcha.impl.ShadowGimpy |
com.google.code.kaptcha.impl.WaterRipple |
kaptcha.background.impl | 背景实现类 | com.google.code.kaptcha.impl.DefaultBackground |
kaptcha.background.clear.from | 背景颜色渐变,开始颜色 | light grey |
kaptcha.background.clear.to | 背景颜色渐变, 结束颜色 | white |
kaptcha.word.impl | 文字渲染器 | com.google.code.kaptcha.text.impl.DefaultWordRenderer |
kaptcha.session.key | session key | KAPTCHA_SESSION_KEY |
kaptcha.session.date | session date | KAPTCHA_SESSION_DATE |
新建springboot项目,并在其pom.xml中导入kaptcha依赖:
com.github.penggle kaptcha2.3.2
1.2 创建前端页面与跳转页面
前端页面index.html
kaptcha验证码验证
跳转页面success.html
Title - 锐客网 success
1.3 实现后端代码
1.3.1 注入keptcha配置类
创建配置类KaptchaConfig.java
package com.allin.config; import com.google.code.kaptcha.impl.DefaultKaptcha; import com.google.code.kaptcha.util.Config; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; import java.util.Properties; @Componentpublic class KaptchaConfig {@Beanpublic DefaultKaptcha getDefaultKaptcha(){com.google.code.kaptcha.impl.DefaultKaptcha defaultKaptcha = new com.google.code.kaptcha.impl.DefaultKaptcha(); Properties properties = new Properties(); properties.put("kaptcha.border", "no"); properties.put("kaptcha.textproducer.font.color", "black"); properties.put("kaptcha.image.width", "150"); properties.put("kaptcha.image.height", "40"); properties.put("kaptcha.textproducer.font.size", "30"); properties.put("kaptcha.session.key", "verifyCode"); properties.put("kaptcha.textproducer.char.space", "5"); Config config = new Config(properties); defaultKaptcha.setConfig(config); return defaultKaptcha; }}
1.3.2 创建后端控制类生成验证码
创建控制类CommonController类,一方面通过流的方式将随机生成的验证码图片信息发送到前端浏览器;另一方面将验证码中的验证信息写入session中,以方便后续的验证
package com.allin.controller; import com.google.code.kaptcha.impl.DefaultKaptcha; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import javax.imageio.ImageIO; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; @Controllerpublic class CommonController {@Autowiredprivate DefaultKaptcha captchaProducer; @GetMapping("/common/kaptcha")public void defaultKaptcha(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {byte[] captchaOutputStream = null; ByteArrayOutputStream imgOutputStream = new ByteArrayOutputStream(); try {//生产验证码字符串并保存到session中String verifyCode = captchaProducer.createText(); httpServletRequest.getSession().setAttribute("verifyCode", verifyCode); BufferedImage challenge = captchaProducer.createImage(verifyCode); ImageIO.write(challenge, "jpg", imgOutputStream); } catch (IllegalArgumentException e) {httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND); return; }captchaOutputStream = imgOutputStream.toByteArray(); httpServletResponse.setHeader("Cache-Control", "no-store"); httpServletResponse.setHeader("Pragma", "no-cache"); httpServletResponse.setDateHeader("Expires", 0); httpServletResponse.setContentType("image/jpeg"); ServletOutputStream responseOutputStream = httpServletResponse.getOutputStream(); responseOutputStream.write(captchaOutputStream); responseOutputStream.flush(); responseOutputStream.close(); }}
1.3.3 实现验证码的验证与页面跳转
对前端输入的数据并发送到服务器的验证信息进行校验,当输入信息与验证码信息一致则跳转至success.html页面,否则跳转至false.html页面
@Controllerpublic class AdminController {@PostMapping("/loginh")public String loginByKaptcha(@RequestParam("verifyCode") String verifyCode,HttpSession session){String kaptchaCode = session.getAttribute("verifyCode") + ""; if(verifyCode.equals(kaptchaCode)){return "success"; }return "false"; }}
二、使用hutool-captcha方式实现验证码生成与验证 Hutool是一个Java工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法,让Java语言也可以“甜甜的”。Hutool最初是我项目中“util”包的一个整理,后来慢慢积累并加入更多非业务相关功能,并广泛学习其它开源项目精髓,经过自己整理修改,最终形成丰富的开源工具集
Hutool参考文档
文章图片
2.1 pom文件中导入hutool-captcha依赖
新建springboot项目,并在其pom.xml中导入hutool-captcha依赖:
cn.hutool hutool-all5.8.1
2.2 创建前端页面与跳转页面
前端页面index.html
Hutool-captcha验证码验证
跳转页面success.html
Title - 锐客网 success
2.3 实现后端代码
2.3.1 创建后端控制类生成验证码
创建控制类CommonController类,一方面通过流的方式将随机生成的验证码图片信息发送到前端浏览器;另一方面将验证码中的验证信息写入session中,以方便后续的验证
@RestControllerpublic class HutoolController {@GetMapping("/common/verify")public void Verify(HttpServletRequest request,HttpServletResponse response) throws IOException {//定义图形验证码的长、宽、验证码字符数、干扰线宽度ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(150, 40, 5, 4); //图形验证码写出,可以写出到文件,也可以写出到流captcha.write(response.getOutputStream()); //获取验证码中的文字内容String verifyCode = captcha.getCode(); request.getSession().setAttribute("verifyCode",verifyCode); }
2.3.2 实现验证码的验证与页面跳转
对前端输入的数据并发送到服务器的验证信息进行校验,当输入信息与验证码信息一致则跳转至success.html页面,否则跳转至false.html页面
@Controllerpublic class AdminController {@PostMapping("/loginc")public String loginByHutool(@RequestParam("verifyCode") String verifyCode,HttpSession session){String captchaCode = session.getAttribute("verifyCode") + ""; if(verifyCode.equals(captchaCode)){return "success"; }return "false"; }}
【springboot验证码的生成与验证的两种方法】到此这篇关于springboot验证码的生成与验证的两种方法的文章就介绍到这了,更多相关springboot验证码生成验证 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- SpringBoot利用切面注解及反射实现事件监听功能
- java|java springboot邮箱找回密码功能的实现讲解
- vue实现tagsview多页签导航功能的示例代码
- 超级记忆之数字编码(五)
- spingboot|java计算机毕业设计基于springboot+vue+elementUI的口腔管理平台管理系统(前后端分离)
- 计算机毕业论文和程序设计|基于Springboot的医院药品管理系统的设计与实现.zip(论文+项目源码)
- spingboot|springboot+vue+elementUI 会员制医疗预约服务管理信息系统-#毕业设计
- day08-Java面向对象三(代码块/继承/final)
- JAVA|SpringBoot 线程池
- java|java gc日志乱码_让bug无处藏身,Java 线上问题排查思路、常用工具