Kaptcha 是一个可高度配置的实用验证码生成工具,和springboot结合相当的简单,kaptchap在springboot中只要编写配置类就行,其中可以配置这些信息:
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包
com.github.penggle
kaptcha
2.3.2
2.2.编写配置类
@Configuration
public class KaptchaConfig {
@Bean
@Qualifier("captchaProducer") //Kaptcha配置类名
public DefaultKaptcha kaptcha() {
DefaultKaptcha kaptcha = new DefaultKaptcha();
Properties properties = new Properties();
properties.setProperty(Constants.KAPTCHA_BORDER, "yes");
properties.setProperty(Constants.KAPTCHA_BORDER_COLOR, "220,220,220");
properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_COLOR, "38,29,12");
properties.setProperty(Constants.KAPTCHA_IMAGE_WIDTH, "147");
properties.setProperty(Constants.KAPTCHA_IMAGE_HEIGHT, "34");
properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_SIZE, "25");
properties.setProperty(Constants.KAPTCHA_SESSION_KEY, "code");
properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4");
properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial");
properties.setProperty(Constants.KAPTCHA_NOISE_COLOR, "164,128,55");
properties.setProperty(Constants.KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy");
properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_STRING, "0123456789");
Config config = new Config(properties);
kaptcha.setConfig(config);
return kaptcha;
}
}
2.3.获取验证码
使用上面配置的captchaProducer,返回的是图片,所以我们用流输出,这里还保存了数值,存入session中,用于验证
@Controller
@Slf4j
public class KaptchaController {
private final Producer captchaProducer;
@Autowired
public KaptchaController(Producer captchaProducer) {
this.captchaProducer = captchaProducer;
}
@RequestMapping("/image/code")
public ModelAndView kaptcha(HttpServletRequest request, HttpServletResponse response) throws IOException {
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 = captchaProducer.createText();//获取数值,保存起来,用于提交验证
session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);
String code = (String) session.getAttribute(Constants.KAPTCHA_SESSION_KEY);
log.info("输出验证码:[{}]", code);
BufferedImage bi = captchaProducer.createImage(capText);
ServletOutputStream out = response.getOutputStream();
ImageIO.write(bi, "jpg", out);
out.flush();
out.close();
return null;
}
}
2.4.验证是否正确
/**
* 登录执行方法
*
* @param request
* @param response
* @param requestType
* @return
*/
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(HttpServletRequest request, HttpServletResponse response, String requestType, String data) {
if (StringUtils.isEmpty(data.getVercode())) {
return "0;//"验证码为空!
} else {
String code = (String) request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);
if (code == null) {
return "-1";//"请刷新页面"
}
if (!code.equalsIgnoreCase(data)) {
return "2";//验证码错误!
}
}
//接下来是正确的
//doworking.....
}
最后:这个挺好用的,生成的样式也好看,推荐大家用,如有什么不明白的,可以QQ找我
原创来源:滴一盘技术