1.引入依赖,这个依赖中包含了生成验证码的工具类
<!--引入hutool --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.9</version></dependency>
2.编写配置类
import cn.hutool.captcha.CaptchaUtil; import cn.hutool.captcha.LineCaptcha; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;@Controller @RequestMapping("code") public class CodeController {@GetMapping("image")public void code(HttpServletRequest req, HttpServletResponse resp) throws IOException {// 创建一个验证码 长,宽,字符数,干扰元素个数LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100, 6, 15);// 将验证码放到session中以供前端获取展示String code = lineCaptcha.getCode();//真实验证码System.err.println(code);req.getSession().setAttribute("code",code);// 用流写出去lineCaptcha.write(resp.getOutputStream());}}
3.重启该项目,打开浏览器访问该接口,就可以看到我们生成的验证码
4.获取该验证码来进行判断,一个用户输入的,一个用工具类生成的
@RequestMapping("login")public ResponseResult login(@RequestBody User user, HttpServletRequest request){String c = (String) request.getSession().getAttribute("code");String code = user.getCode();if(code==null||code==""){System.out.println("验证码不能为空");return null;}if(!c.equals(code)){System.out.println("验证码不匹配");return null;}return productFeign.login(user);}
在SPringBoot项目中用于返回响应结果的工具类
import java.io.Serializable;/*** 响应结果类* @param <E> 响应数据的类型*/ public class ResponseResult<E> implements Serializable {/** 操作成功的状态码 */public static final int OK = 200;/** 状态码 */private Integer state;/** 状态描述信息 */private String message;/** 数据 */private E data;public ResponseResult() {}public ResponseResult(Integer state, String message) {this.state = state;this.message = message;}public ResponseResult(Integer state, String message, E data) {this.state = state;this.message = message;this.data = data;}public Integer getState() {return state;}public void setState(Integer state) {this.state = state;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public E getData() {return data;}public void setData(E data) {this.data = data;}public static <E> ResponseResult<E> getResponseResult() {return new ResponseResult<>(OK, null, null);}public static <E> ResponseResult<E> getResponseResult(Integer state) {return new ResponseResult<>(state, null, null);}public static <E> ResponseResult<E> getResponseResult(String message) {return new ResponseResult<>(OK, message, null);}public static <E> ResponseResult<E> getResponseResult(E data) {return new ResponseResult<>(OK, null, data);}public static <E> ResponseResult<E> getResponseResult(Integer state, String message) {return new ResponseResult<>(state, message, null);}public static <E> ResponseResult<E> getResponseResult(String message, E data) {return new ResponseResult<>(OK, message, data);} }
用这个工具类来统一给客户端返回结果