Spring Web 项目添加验证码功能
Spring Web 项目添加验证码功能
最近在学习公司新项目,此文作为学习记录,方便以后使用。
添加依赖
<!-- 验证码 -->
<dependency>
<groupId>com.github.axet</groupId>
<artifactId>kaptcha</artifactId>
<version>0.0.9</version>
</dependency>
配置验证码格式
/**
* 验证码配置
*/
@Configuration
public class KaptchaConfig {
@Bean
public DefaultKaptcha producer() {
Properties properties = new Properties();
properties.put("kaptcha.border", "no");
properties.put("kaptcha.textproducer.font.color", "black");
properties.put("kaptcha.textproducer.char.space", "5");
Config config = new Config(properties);
DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
defaultKaptcha.setConfig(config);
return defaultKaptcha;
}
}
添加 Controller
@Slf4j
@AllArgsConstructor
@RestController
@RequestMapping("/image")
public class ImageController {
private final Producer producer;
private final StringRedisTemplate redisTemplate;
@GetMapping("/captcha.jpg")
public void handle(HttpServletRequest request, HttpServletResponse response) {
String key = request.getParameter("key");
// 生成验证码
String capText = producer.createText();
BufferedImage image = producer.createImage(capText);
// 保存验证码信息
redisTemplate.opsForValue().set(key, capText, 10, TimeUnit.MINUTES);
try {
response.setHeader("Cache-Control", "no-store, no-cache");
response.setContentType("image/jpeg");
ServletOutputStream out = response.getOutputStream();
ImageIO.write(image, "jpg", out);
} catch (IOException e) {
log.error("验证码生成失败:{}", e.getMessage());
}
}
}
参数key
可以由前端传用户名加时间戳Date.new()
请自行添加 lombok springmvc redis 等依赖
效果
附一个配置项:
配置项:kaptcha.border
描述:图片边框,合法值:yes , no
默认值:yes配置项:kaptcha.border.color
描述:边框颜色,合法值: r,g,b (and optional alpha) 或者 white,black,blue.
默认值:black配置项:kaptcha.image.width
描述:图片宽
默认值:200配置项:kaptcha.image.height
描述:图片高
默认值:50配置项:kaptcha.producer.impl
描述:图片实现类
默认值:com.google.code.kaptcha.impl.DefaultKaptcha配置项:kaptcha.textproducer.impl
描述:文本实现类
默认值:com.google.code.kaptcha.text.impl.DefaultTextCreator配置项:kaptcha.textproducer.char.string
描述:文本集合,验证码值从此集合中获取
默认值:abcde2345678gfynmnpwx配置项:kaptcha.textproducer.char.length
描述:验证码长度
默认值:5配置项:kaptcha.textproducer.font.names
描述:字体
默认值:Arial, Courier配置项:kaptcha.textproducer.font.size
描述:字体大小
默认值:40px.配置项:kaptcha.textproducer.font.color
描述:字体颜色,合法值: r,g,b 或者 white,black,blue.
默认值:black配置项:kaptcha.textproducer.char.space
描述:文字间隔
默认值:2配置项:kaptcha.noise.impl
描述:干扰实现类
默认值:com.google.code.kaptcha.impl.DefaultNoise配置项:kaptcha.noise.color
描述:干扰 颜色,合法值: r,g,b 或者 white,black,blue.
默认值:black配置项:kaptcha.obscurificator.impl
描述:图片样式,
水纹 com.google.code.kaptcha.impl.WaterRipple
鱼眼 com.google.code.kaptcha.impl.FishEyeGimpy
阴影 com.google.code.kaptcha.impl.ShadowGimpy
默认值:com.google.code.kaptcha.impl.WaterRipple配置项:kaptcha.background.impl
描述:背景实现类
默认值:com.google.code.kaptcha.impl.DefaultBackground配置项:kaptcha.background.clear.from
描述:背景颜色渐变,开始颜色
默认值:light grey配置项:kaptcha.background.clear.to
描述:背景颜色渐变, 结束颜色
默认值:white配置项:kaptcha.word.impl
描述:文字渲染器
默认值:com.google.code.kaptcha.text.impl.DefaultWordRenderer配置项:kaptcha.session.key
描述:session key
默认值:KAPTCHA_SESSION_KEY配置项:kaptcha.session.date
描述:session date
默认值:KAPTCHA_SESSION_DATE