SpringBoot整合Kaptcha验证码

SpringBoot整合Kaptcha验证码

Kaptcha 简介

Kaptcha 是一个可高度配置的实用验证码生成工具,可自由配置的选项如:

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

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

pom



   com.github.axet
   kaptcha
   0.0.9

Configuration

package com.wildcatcloud.wildcat.gateway.config;

import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import com.pig4cloud.pigx.common.core.constant.SecurityConstants;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Properties;

/**
 * @author qinbs
 * @date 2019-02-21 21:12:18
 */
@Configuration
public class KaptchaConfiguration {

   private static final String KAPTCHA_BORDER = "kaptcha.border";
   private static final String KAPTCHA_TEXTPRODUCER_FONT_COLOR = "kaptcha.textproducer.font.color";
   private static final String KAPTCHA_TEXTPRODUCER_CHAR_SPACE = "kaptcha.textproducer.char.space";
   private static final String KAPTCHA_IMAGE_WIDTH = "kaptcha.image.width";
   private static final String KAPTCHA_IMAGE_HEIGHT = "kaptcha.image.height";
   private static final String KAPTCHA_TEXTPRODUCER_CHAR_LENGTH = "kaptcha.textproducer.char.length";
   private static final Object KAPTCHA_IMAGE_FONT_SIZE = "kaptcha.textproducer.font.size";

   /**
    * 默认生成图形验证码宽度
    */
   private static final String DEFAULT_IMAGE_WIDTH = "100";

   /**
    * 默认生成图像验证码高度
    */
   private static final String DEFAULT_IMAGE_HEIGHT = "40";

   /**
    * 边框颜色,合法值: r,g,b (and optional alpha) 或者 white,black,blue.
    */
   private static final String DEFAULT_COLOR_FONT = "black";

   /**
    * 图片边框
    */
   private static final String DEFAULT_IMAGE_BORDER = "no";
   /**
    * 默认图片间隔
    */
   private static final String DEFAULT_CHAR_SPACE = "5";
   /**
    * 验证码文字大小
    */
   private static final String DEFAULT_IMAGE_FONT_SIZE = "30";

   @Bean
   public DefaultKaptcha producer() {
      Properties properties = new Properties();
      properties.put(KAPTCHA_BORDER, DEFAULT_IMAGE_BORDER);
      properties.put(KAPTCHA_TEXTPRODUCER_FONT_COLOR, DEFAULT_COLOR_FONT);
      properties.put(KAPTCHA_TEXTPRODUCER_CHAR_SPACE, DEFAULT_CHAR_SPACE);
      properties.put(KAPTCHA_IMAGE_WIDTH, DEFAULT_IMAGE_WIDTH);
      properties.put(KAPTCHA_IMAGE_HEIGHT, DEFAULT_IMAGE_HEIGHT);
      properties.put(KAPTCHA_IMAGE_FONT_SIZE, DEFAULT_IMAGE_FONT_SIZE);
      properties.put(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, SecurityConstants.CODE_SIZE);
      Config config = new Config(properties);
      DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
      defaultKaptcha.setConfig(config);
      return defaultKaptcha;
   }
} 

生成验证码

 

//生成验证码
String text = producer.createText();
BufferedImage image = producer.createImage(text);

//保存验证码信息 前台传随机数,也之后也用户比对
String randomStr = serverRequest.queryParam("randomStr").get();
redisTemplate.opsForValue().set(CommonConstants.DEFAULT_CODE_KEY + randomStr, text
   , SecurityConstants.CODE_TIME, TimeUnit.SECONDS);

// 转换流信息写出
FastByteArrayOutputStream os = new FastByteArrayOutputStream();
try {
   ImageIO.write(image, "jpeg", os);
} catch (IOException e) {
   log.error("ImageIO write err", e);
   return Mono.error(e);
}

return ServerResponse
   .status(HttpStatus.OK)
   .contentType(MediaType.IMAGE_JPEG)
   .body(BodyInserters.fromResource(new ByteArrayResource(os.toByteArray())));

你可能感兴趣的:(SpringBoot整合Kaptcha验证码)