生成验证码
kaptcha
1.导入jar包
2.编写配置类
3.随机生成字符、图片
实现逻辑
设置Kaptcha配置类(记得要@config 和 @bean 才能被springIOC容器管理)
//验证码配置
//是配置类的注解
//加注解表示收到springIOC容器管理
@Configuration
public class KaptchaConfig {
@Bean
public Producer kaptchaProducer(){
Properties properties = new Properties();
properties.setProperty("kaptcha.image.width","100");
properties.setProperty("kaptcha.image.height","40");
properties.setProperty("kaptcha.textproducer.front.size","32");
properties.setProperty("kaptcha.textproducer.front.color","0,0,0");
properties.setProperty("kaptcha.textproducer.char.length","1");
properties.setProperty("kaptcha.textproducer.char.string","0123546789");
DefaultKaptcha kaptcha = new DefaultKaptcha();
Config config = new Config(properties);
kaptcha.setConfig(config);
return kaptcha;
}
}
在Controller中设置生成的验证码的路径,然后通过配置类kaptchaProducer生成验证码,把生成的验证码文字存入session以供验证,然后生成验证码文字对应的图片输出给浏览器,
@RequestMapping(path = "/kaptcha",method = RequestMethod.GET)
public void getKaptcha(HttpServletResponse response, HttpSession session){
//生成验证码
String text = kaptchaProducer.createText();
BufferedImage image = kaptchaProducer.createImage(text);
//验证码的文字存入session
session.setAttribute("kaptcha",text);
//将图片直接输出给浏览器
response.setContentType("image/png");
try {
ServletOutputStream os = response.getOutputStream();
ImageIO.write(image,"png",os);
//不用关流,springMVC会自动管理
} catch (IOException e) {
e.printStackTrace();
}
在前端页面绑定验证码图片对应的路径
<div class="col-sm-4">
<img th:src="@{/kaptcha}" id="kaptcha" style="width:100px;height:40px;" class="mr-2"/>
<a href="javascript:refresh_kaptcha;" class="font-size-12 align-bottom">刷新验证码</a>
</div>
坑:无法刷新验证码,更换jQuery的cdn地址之后尚无法解决。