在 Spring Boot 中,你可以将 Hutool 生成验证码的功能集成到 RESTful API 接口中。
依赖
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.14</version> <!-- 使用最新版本 -->
</dependency>
创建验证码
package com.base.controller;import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.CircleCaptcha;
import cn.hutool.captcha.LineCaptcha;
import cn.hutool.captcha.ShearCaptcha;
import cn.hutool.captcha.generator.MathGenerator;
import cn.hutool.captcha.generator.RandomGenerator;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@RestController
@RequestMapping("/api/captcha")
@Api(tags = "验证码")
public class CaptchaController {@GetMapping("/image")@ApiOperation("线段干扰的验证码")public void getCaptchaImage(HttpServletResponse response) throws IOException {//定义图形验证码的长和宽LineCaptcha captcha = CaptchaUtil.createLineCaptcha(200, 100);System.out.println("验证码:"+captcha.getCode());// 设置响应类型为图片response.setContentType("image/png");// 将验证码图片写入响应captcha.write(response.getOutputStream());}@GetMapping("/image2")@ApiOperation("圆圈干扰验证码")public void getCaptchaImage2(HttpServletResponse response) throws IOException {// 创建验证码对象//定义图形验证码的长、宽、验证码字符数、干扰元素个数CircleCaptcha captcha = CaptchaUtil.createCircleCaptcha(200, 100, 4, 20);System.out.println("验证码:"+captcha.getCode());// 设置响应类型为图片response.setContentType("image/png");// 将验证码图片写入响应captcha.write(response.getOutputStream());}@GetMapping("/image3")@ApiOperation("扭曲干扰验证码")public void getCaptchaImage3(HttpServletResponse response) throws IOException {//定义图形验证码的长、宽、验证码字符数、干扰线宽度ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(200, 100, 4, 4);System.out.println("验证码:"+captcha.getCode());// 设置响应类型为图片response.setContentType("image/png");// 将验证码图片写入响应captcha.write(response.getOutputStream());}@GetMapping("/image4")@ApiOperation("自定义纯数字的验证码")public void getCaptchaImage4(HttpServletResponse response) throws IOException {//定义图形验证码的长、宽、验证码字符数、干扰线宽度// 自定义纯数字的验证码(随机4位数字,可重复)RandomGenerator randomGenerator = new RandomGenerator("0123456789", 4);LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100);lineCaptcha.setGenerator(randomGenerator);// 重新生成codelineCaptcha.createCode();// 设置响应类型为图片response.setContentType("image/png");// 将验证码图片写入响应lineCaptcha.write(response.getOutputStream());}@GetMapping("/image5")@ApiOperation("加减乘除的验证码")public void getCaptchaImage5(HttpServletResponse response) throws IOException {ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(200, 45, 4, 4);// 自定义验证码内容为四则运算方式captcha.setGenerator(new MathGenerator(1));// 重新生成codecaptcha.createCode();MathGenerator mathGenerator = new MathGenerator();// 用户输入校验System.out.println("验证结果:"+mathGenerator.verify(captcha.getCode(), "1"));// 设置响应类型为图片response.setContentType("image/png");// 将验证码图片写入响应captcha.write(response.getOutputStream());}
}
访问验证码接口
上面提到的5种样式,效果如下:
参考:文档