GitHub项目地址:GitHub - penggle/kaptcha: kaptcha - A kaptcha generation engine.
kaptcha介绍
kaptcha官网(Google Code Archive - Long-term storage for Google Code Project Hosting.)对其介绍如下,
kaptcha十分易于安装和使用,并且所生成的验证码难以被破解。
可以通过框架的模块配置,来产出不同形式的输出内容。
kaptcha使用
项目依赖
<dependency>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
</dependency>
基本参数配置|Bean注入
可参考官网文档:Google Code Archive - Long-term storage for Google Code Project Hosting.
Producer接口与相关方法
参数配置的主要目的为Bean实例提供属性信息,这里的Bean实例其实就是Kaptcha框架内置的com.google.code.kaptcha.Producer接口实例,其实该框架内置了一个接口实现子类:DefaultKaptcha,只是没有直接注入到Spring容器中。
查看该接口的源码,可以看到它声明了两个抽象方法:
createImage:创建一个包含验证码的图像,返回值类型为BufferedImage,提供了对Image图像数据的缓冲支持。 createText:创建一个简单的文本验证码。
package com.google.code.kaptcha;
import java.awt.image.BufferedImage;
/**
* Responsible for creating captcha image with a text drawn on it.
*/
public interface Producer
{
/**
* Create an image which will have written a distorted text.
*
* @param text
* the distorted characters
* @return image with the text
*/
public BufferedImage createImage(String text);
/**
* @return the text to be drawn
*/
public abstract String createText();
}
Bean注入配置
因此,我们要将其手动注入到SpringBean容器中(也可以自定义Producer接口的实现子类),以便于后续生成验证码的操作。可以结合@Configuration、@Bean注解进行配置。
示例代码如下,参数含义已经在注释部分做了说明,
package com.example.soilcommon.core.kaptcha;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;
import static com.google.code.kaptcha.Constants.*;
/**
* kaptcha验证码插件配置
*/
@Configuration
public class KaptchaConfig {
/**
* 注入Bean实例
* @return DefaultKaptcha
*/
@Bean(name = "defaultKaptcha")
public DefaultKaptcha getDefaultKaptcha(){
DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
Properties properties = new Properties();
// 是否有边框 默认为true 我们可以自己设置yes,no
properties.setProperty(KAPTCHA_BORDER, "no");
// 验证码文本字符颜色 默认为Color.BLACK
properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "black");
// 验证码图片宽度 默认为200
properties.setProperty(KAPTCHA_IMAGE_WIDTH, "160");
// 验证码图片高度 默认为50
properties.setProperty(KAPTCHA_IMAGE_HEIGHT, "60");
// 验证码文本字符大小 默认为40
properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "38");
// KAPTCHA_SESSION_KEY
properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCode");
// 验证码文本字符长度 默认为5-修改为4
properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4");
// 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize)
properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier");
// 图片样式 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpy
properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy");
Config config = new Config(properties);
defaultKaptcha.setConfig(config);
return defaultKaptcha;
}
}
生成验证码
接下来我们借助com.google.code.kaptcha.Producer接口实例提供的两个方法:createImage、createText来分别生成图像验证码、文本验证码。
示例代码如下,
package com.example.soilcommon.service.impl;
import com.example.soilcommon.service.KaptchaService;
import com.google.code.kaptcha.Producer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.awt.image.BufferedImage;
@Service
public class KaptchaServiceImpl implements KaptchaService {
@Autowired
private Producer producer;
@Override
public String createCaptchaText() {
return producer.createText();
}
@Override
public BufferedImage createCaptchaImage(String captchaText) {
return producer.createImage(captchaText);//图像验证码;
}
}