首页 > 其他分享 >springboot验证码-kaptcha

springboot验证码-kaptcha

时间:2023-08-18 22:46:13浏览次数:34  
标签:springboot kaptcha 验证码 verifyCode import com properties

前言
网上实现生成验证码的方式有很多,我这里只记录下使用 kaptcha 生成验证码的方式。

实现思路
1、整合 kaptcha ,创建 kaptcha 的工具类。
2、编写接口,在接口中使用 kaptcha 工具类来生成验证码图片(验证码信息)并返回。
3、登录时从 session 中获取验证码进行校验。
4、测试获取验证码图片(验证码信息)接口。

代码实现
一、整合 kaptcha ,创建 kaptcha 的工具类
1、pom 引入 kaptcha 依赖

<!--生成验证码-->
<dependency>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
</dependency>

2、创建 KaptchaConfig 工具类(可直接复制粘贴使用)

package com.boc.ljh.utils.code;

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;

/**
* @Author: ljh
* @ClassName KaptchaConfig
* @Description TODO
* @date 2022/11/3 20:23
* @Version 1.0
*/
@Component
public class KaptchaConfig {

@Bean
public 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"); //是否有边框 yes有 no没有
properties.put("kaptcha.textproducer.font.color", "blue"); //验证码字体颜色
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"); //存储在session中值的key
properties.put("kaptcha.textproducer.char.length", "5"); //验证码字符个数
Config config = new Config(properties);
defaultKaptcha.setConfig(config);

return defaultKaptcha;
}

}

二、编写接口,在接口中使用 kaptcha 工具类来生成验证码图片(验证码信息)并返回。
1、编写获取验证码图片或者验证码信息功能接口(二选一或者全写都可以,可直接复制粘贴使用)

package com.boc.ljh.controller;

import com.boc.ljh.utils.Result;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

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;

/**
* @Author: ljh
* @ClassName VerificationCodeController
* @Description TODO
* @date 2022/11/3 20:25
* @Version 1.0
*/
@RestController
@Api(tags = "验证码管理")
@RequestMapping("/code")
public class VerificationCodeController {


@Autowired
private DefaultKaptcha captchaProducer;


@ApiOperation("获取验证码图片")
@GetMapping("/getVerificationCodePhoto")
public void getVerificationCodePhoto(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
byte[] captchaOutputStream = null;
ByteArrayOutputStream imgOutputStream = new ByteArrayOutputStream();
try {
//生成验证码
String verifyCode = captchaProducer.createText();
//验证码字符串保存到session中
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();
}


@ApiOperation("获取验证码")
@GetMapping("/getVerificationCode")
public Result getVerificationCode(HttpServletRequest request) {
Result result = new Result();
String verifyCode = captchaProducer.createText();
request.getSession().setAttribute("verifyCode", verifyCode);
result.setData(verifyCode);
return result;

}

}

三、登录时从 session 中获取验证码进行校验
注意:从session中获取验证码时,key值一定要和前面生成验证码时存储的key保持一致。

 


四、测试获取验证码图片(验证码信息)接口
测试获取验证码图片功能接口

 

测试获取验证码字符串功能接口

 



标签:springboot,kaptcha,验证码,verifyCode,import,com,properties
From: https://www.cnblogs.com/wjsqqj/p/17641759.html

相关文章

  • springboot验证码-Hutool-captcha
    前言在Web应用程序中,为了保护用户信息的安全性,验证码已经成为了一个非常普遍的安全措施,而Hutool-captcha是一款非常优秀的开源图形验证码工具,简单易用,提供了丰富的特性,可以帮助我们快速实现验证码功能。本文将介绍如何使用SpringBoot整合Mybatis-Plus和Hutool-captcha实现验证码......
  • springboot验证码-kaptcha谷歌验证码工具
    验证码,就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息。Maven依赖在开发验证码功能的时候,kaptcha谷歌验证码工具,依赖。<!--验证码--><dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artif......
  • springboot验证码-kaptcha,hutool-captcha
    前言在springboot的登陆页面中为了防止机器大规模注册,机器暴力破解数据密码等危害,需要验证随机生成的验证码。现提出两种简易方案生成验证码功能,一种采用springboot整合kaptcha第三方验证码生成工具的生成方案;另一种采用springboot整合第三方类库hutool生成验证码,验证成功跳转至s......
  • SpringBoot 启动流程追踪(第二篇)
    上一篇文章分析了除refresh方法外的流程,并着重分析了load方法,这篇文章就主要分析refresh方法,可以说refresh方法是springboot启动流程最重要的一环,没有之一。我们通常在分析源码的过程中,都需要带着一个目标去看,不然看这看那,感觉什么都没有看一样。这篇文章的目标在于弄懂......
  • Springboot使用Redisson作为分布式锁
    官方地址:https://github.com/redisson/redisson/wiki/Table-of-Content一些官网说明    Redisson采用了基于NIO的Netty框架,不仅能作为Redis底层驱动客户端,具备提供对Redis各种组态形式的连接功能,对Redis命令能以同步发送、异步形式发送、异步流形式发送或管道形式发送的功能......
  • Springboot中实现观察者模式
    在SpringBoot中实现观察者模式可以通过以下步骤进行:1.定义观察者接口(Observer):创建一个接口,定义观察者对象需要实现的方法,例如update()方法。publicinterfaceObserver{voidupdate();}2.实现具体的观察者(具体实现Observer接口的类):创建一个或多个具体的观察者类,实......
  • springboot redssion 单机模式/集群模式/哨兵模式连接
    引入依赖:<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.10.7</version></dependency><dependency><groupId>......
  • SpringBoot3集成Kafka
    目录一、简介二、环境搭建1、Kafka部署2、Kafka测试3、可视化工具三、工程搭建1、工程结构2、依赖管理3、配置文件四、基础用法1、消息生产2、消息消费五、参考源码标签:Kafka3.Kafka-eagle3;一、简介Kafka是一个开源的分布式事件流平台,常被用于高性能数据管道、流分析、数据集......
  • idea导入新springboot项目时 如何进行configure相关的配置 启动项目
    idea导入springboot项目运行教程前置要求①具备Java环境,并且可以通过Maven进行安装项目依赖;②具备IntelliJIDEA工具,推荐专业版,社区版也不影响;③具备Mysql5.7或以上版本数据库;④具备Navicat数据库可视化管理工具;⑤推荐使用GoogleChrome、Firefox浏览器idea导入项目的运行教......
  • SpringBoot
    1.回顾spring的AOP:(1)什么是AOP?面向切面编程,它是对OOP的一种补充技术。把业务代码和非业务代码分离。在不改变业务代码的前提下,可以对业务代码进行增强。(2)应用场景:(1)日志(2)权限校验(3)事务处理。(3)核心的概念:​【1】切面:​[2]切点:​[3]......