本文与大家分享基本上每个系统、项目都会使用到的验证码生成技术,技术上采用kaptcha。
①前期准备
创建一个基于maven的springboot项目,添加kaptcha依赖:
<dependency>
<groupId>com.github.axet</groupId>
<artifactId>kaptcha</artifactId>
<version>0.0.9</version>
</dependency>
②编写kaptcha配置类
有兴趣的朋友还可以根据实际需要添加其他配置,笔者这里的配置如下:
@Configuration
public class KaptchaConfig {
@Bean
public DefaultKaptcha producer() {
Properties properties = new Properties();
properties.put("kaptcha.border", "no");
properties.put("kaptcha.textproducer.font.color", "blue");
properties.put("kaptcha.textproducer.char.space", "5");
properties.put("kaptcha.textproducer.font.names", "Arial,Courier,cmr10,宋体,楷体,微软雅黑");
Config config = new Config(properties);
DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
defaultKaptcha.setConfig(config);
return defaultKaptcha;
}
}
③编写控制层代码
编写controller层代码,生成验证码:
@RestController
@RequestMapping("/kaptcha")
public class CaptchaController {
@Autowired
private DefaultKaptcha producer;
@RequestMapping(value = "/get")
public ModelAndView getKaptchaImage(HttpServletRequest request, HttpServletResponse response) throws Exception {
HttpSession session = request.getSession();
//设置响应参数
response.setDateHeader("Expires", 0);
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
response.addHeader("Cache-Control", "post-check=0, pre-check=0");
response.setHeader("Pragma", "no-cache");
response.setContentType("image/jpeg");
String capText = producer.createText();
//保存到session
session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);
BufferedImage bi = producer.createImage(capText);
ServletOutputStream out = response.getOutputStream();
ImageIO.write(bi, "jpg", out);
try {
out.flush();
} finally {
out.close();
}
String code = (String)session.getAttribute(Constants.KAPTCHA_SESSION_KEY);
System.out.println("******************验证码是: " + code + "******************");
return null;
}
}
④测试效果
运行项目并在浏览器访问,效果如下:
OK!验证码生成成功!