kcaptcha验证码
引入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>kaptcha-spring-boot-starter</artifactId>
<version>1.1.0</version>
</dependency>
代码展示
@RestController
@RequestMapping("/kcaptcha")
public class KcaptchaController {
@Autowired
private Kaptcha kaptcha;
@GetMapping("/generator")
@TokenCheck(required = false)
public void generatorCode(HttpServletRequest request, HttpServletResponse response) {
kaptcha.render();
}
@GetMapping("/verify")
@TokenCheck(required = false)
public String verify(String verifyCode, HttpServletRequest request) {
Boolean aBoolean = kaptcha.validate(verifyCode, 10);
if (aBoolean){
return "验证码校验通过";
}
return "验证码校验失败";
}
验证


统一异常处理
使用注解@RestControllerAdvice 创建GlobalExceptionHandler类
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(KaptchaException.class)
public ResultWrapper kcaptchaException(KaptchaException k){
if (k instanceof KaptchaTimeoutException){
return ResultWrapper.getFailBuilder().code(315).msg("验证码超时").build();
}else if (k instanceof KaptchaIncorrectException){
return ResultWrapper.getFailBuilder().code(316).msg("验证码错误").build();
}else if(k instanceof KaptchaNotFoundException){
return ResultWrapper.getFailBuilder().code(317).msg("验证码未找到").build();
}else {
return ResultWrapper.getFailBuilder().code(318).msg("验证码未知错误").build();
}
}
}
ResultWrapper类
@Data
@Builder
public class ResultWrapper<T> implements Serializable {
private int code;
private String msg;
private T date;
public static ResultWrapper.ResultWrapperBuilder getSuccessBuilder(){
return ResultWrapper.builder().code(StateCodeEnum.SUCCESS.getCode()).msg(StateCodeEnum.SUCCESS.getMsg());
}
public static ResultWrapper.ResultWrapperBuilder getFailBuilder(){
return ResultWrapper.builder().code(StateCodeEnum.FAIL.getCode()).msg(StateCodeEnum.FAIL.getMsg());
}
}
枚举类
public enum StateCodeEnum {
PASSWORD_ERROR(1001,"用户名密码不正确"),
USER_EMPTY(1002,"用户不存在"),
FAIL(500,"请求失败"),
SUCCESS(200,"请求成功");
private int code;
private String msg;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
StateCodeEnum(int code , String msg){
this.code = code;
this.msg = msg;
}
}
kcaptcha验证码的配置
kaptcha:
height: 50
width: 200
content:
length: 5
source: abc12345678woshizhongguoren
space: 2
font:
color: black
name: Arial
size: 40
background-color:
from: red
to: white
border:
enabled: true
color: black
thickness: 1
