引入hutool工具包
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.16</version>
</dependency>
package com.example.captcha;
import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.ShearCaptcha;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
/**
* 获取图片验证码,直接生成然后存session中,以流形式输出
* @author zxy
*/
@RestController
public class CaptchaController {
@GetMapping("/getCaptcha")
public String getCaptcha(HttpServletRequest request, HttpServletResponse response) {
OutputStream out = null;
try {
// 取得输出流
out = response.getOutputStream();
//定义图形验证码的长、宽、验证码字符数、干扰线宽度
ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(200, 100, 4, 4);
//图形验证码写出,可以写出到文件,也可以写出到流
captcha.write(out);
//将生成的验证码code放入session中
request.getSession().setAttribute("code", captcha.getCode());
out.flush(); // 将缓存中的数据立即强制刷新, 将缓冲区的数据输出到客户端浏览器
out.close(); // 关闭输出流
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return "图片获取失败";
}
/**
* 校验验证码是否正确/一般直接放拦截器里面
* @param inCode
* @param req
* @return
*/
@GetMapping("/verifyCode")
public String verifyCode(String inCode, HttpServletRequest req) {
if(!StringUtils.hasText(inCode)){
return "inCode为空";
}
// 获取存放在session中的验证码
String code = (String) req.getSession().getAttribute("code");
// 验证码不区分大小写
if(code.toLowerCase().equals(inCode.toLowerCase())) {
return "验证成功";
}else{
return "验证失败";
}
}
}