Kaptcha的详细配置表以及在springboot中的整合和使用

Kaptcha 是一个可高度配置的实用验证码生成工具,和springboot结合相当的简单,kaptchap在springboot中只要编写配置类就行,其中可以配置这些信息:

  • 验证码的字体
  • 验证码字体的大小
  • 验证码字体的字体颜色
  • 验证码内容的范围(数字,字母,中文汉字!)
  • 验证码图片的大小,边框,边框粗细,边框颜色
  • 验证码的干扰线
  • 验证码的样式(鱼眼样式、3D、普通模糊、…)

1.Kaptcha 详细配置表

Constant 描述 默认值
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

2.与springboot整合
2.1.在pom文件引入jar包

  1. com.github.penggle
  2. kaptcha
  3. 2.3.2

2.2.编写配置类

  1. @Configuration
  2. public class KaptchaConfig {
  3. @Bean
  4. @Qualifier("captchaProducer") //Kaptcha配置类名
  5. public DefaultKaptcha kaptcha() {
  6. DefaultKaptcha kaptcha = new DefaultKaptcha();
  7. Properties properties = new Properties();
  8. properties.setProperty(Constants.KAPTCHA_BORDER, "yes");
  9. properties.setProperty(Constants.KAPTCHA_BORDER_COLOR, "220,220,220");
  10. properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_COLOR, "38,29,12");
  11. properties.setProperty(Constants.KAPTCHA_IMAGE_WIDTH, "147");
  12. properties.setProperty(Constants.KAPTCHA_IMAGE_HEIGHT, "34");
  13. properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_SIZE, "25");
  14. properties.setProperty(Constants.KAPTCHA_SESSION_KEY, "code");
  15. properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4");
  16. properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial");
  17. properties.setProperty(Constants.KAPTCHA_NOISE_COLOR, "164,128,55");
  18. properties.setProperty(Constants.KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy");
  19. properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_STRING, "0123456789");
  20. Config config = new Config(properties);
  21. kaptcha.setConfig(config);
  22. return kaptcha;
  23. }
  24. }

2.3.获取验证码
使用上面配置的captchaProducer,返回的是图片,所以我们用流输出,这里还保存了数值,存入session中,用于验证

  1. @Controller
  2. @Slf4j
  3. public class KaptchaController {
  4. private final Producer captchaProducer;
  5. @Autowired
  6. public KaptchaController(Producer captchaProducer) {
  7. this.captchaProducer = captchaProducer;
  8. }
  9. @RequestMapping("/image/code")
  10. public ModelAndView kaptcha(HttpServletRequest request, HttpServletResponse response) throws IOException {
  11. HttpSession session = request.getSession();
  12. response.setDateHeader("Expires", 0);
  13. response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
  14. response.addHeader("Cache-Control", "post-check=0, pre-check=0");
  15. response.setHeader("Pragma", "no-cache");
  16. response.setContentType("image/jpeg");
  17. String capText = captchaProducer.createText();//获取数值,保存起来,用于提交验证
  18. session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);
  19. String code = (String) session.getAttribute(Constants.KAPTCHA_SESSION_KEY);
  20. log.info("输出验证码:[{}]", code);
  21. BufferedImage bi = captchaProducer.createImage(capText);
  22. ServletOutputStream out = response.getOutputStream();
  23. ImageIO.write(bi, "jpg", out);
  24. out.flush();
  25. out.close();
  26. return null;
  27. }
  28. }

2.4.验证是否正确
/**

  1. * 登录执行方法
  2. *
  3. * @param request
  4. * @param response
  5. * @param requestType
  6. * @return
  7. */
  8. @RequestMapping(value = "/login", method = RequestMethod.POST)
  9. public String login(HttpServletRequest request, HttpServletResponse response, String requestType, String data) {
  10. if (StringUtils.isEmpty(data.getVercode())) {
  11. return "0;//"验证码为空!
  12. } else {
  13. String code = (String) request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);
  14. if (code == null) {
  15. return "-1";//"请刷新页面"
  16. }
  17. if (!code.equalsIgnoreCase(data)) {
  18. return "2";//验证码错误!
  19. }
  20. }
  21. //接下来是正确的
  22. //doworking.....
  23. }

最后:这个挺好用的,生成的样式也好看,推荐大家用,如有什么不明白的,可以QQ找我