最近在做一个加减法验证码,记录下实现的过程。
通常Java实现验证码的工具会用到 kaptcha 这个工具包,但实现的验证码都是图形验证码,没有看到加法验证码,查询了相关资料,实现了加减法验证码,效果如图
首先是pom所需要的依赖
<!--验证码-->
<dependency>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
</dependency>
主要是配置类里面,更改下验证码的字符串,代码如下
/**
* 生成验证码配置
*
* @author hqk
*/
@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");
//如果需要生成算法验证码加上一下配置
properties.put("kaptcha.textproducer.char.string", "1234567890");
//如果需要去掉干扰线
properties.put("kaptcha.noise.impl", "com.google.code.kaptcha.impl.NoNoise");
Config config = new Config(properties);
DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
defaultKaptcha.setConfig(config);
return defaultKaptcha;
}
}
接下来写个controller实验下,代码如下
/**
* <p></p >
*
* @author hqk
* @version 1.0: SysLoginController.java v0.1 2019/6/25 上午10:44 hqk Exp$
*/
@RequestMapping("/app/system")
@Controller
public class SysLoginController {
@Resource
private StringRedisTemplate stringRedisTemplate;
@Resource
private Producer producer;
@RequestMapping("number.jpg")
public void number(HttpServletResponse response) throws IOException {
response.setHeader("Cache-Control", "no-store, no-cache");
response.setContentType("image/jpeg");
//生成文字验证码
String text = producer.createText();
//个位数字相加
String s1 = text.substring(0, 1);
String s2 = text.substring(1, 2);
int count = Integer.valueOf(s1).intValue() + Integer.valueOf(s2).intValue();
//生成图片验证码
BufferedImage image = producer.createImage(s1 + "+" + s2 + "=?");
//保存 redis key 自己设置
//stringRedisTemplate.opsForValue().set("",String.valueOf(count));
ServletOutputStream out = response.getOutputStream();
ImageIO.write(image, "jpg", out);
}
}
好了,java实现加法验证码就实现了
代码git地址: https://github.com/qiankunhu/springbootdemo git@github.com:qiankunhu/springbootdemo.git
推荐一下我自己的前端学习群562862926,里面有大神总结的一套前端教学视频,欢迎有兴趣的朋友进群一起学习