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,noproperties.setProperty(KAPTCHA_BORDER, "no");// 验证码文本字符颜色 默认为Color.BLACKproperties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "black");// 验证码图片宽度 默认为200properties.setProperty(KAPTCHA_IMAGE_WIDTH, "160");// 验证码图片高度 默认为50properties.setProperty(KAPTCHA_IMAGE_HEIGHT, "60");// 验证码文本字符大小 默认为40properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "38");// KAPTCHA_SESSION_KEYproperties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCode");// 验证码文本字符长度 默认为5-修改为4properties.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.ShadowGimpyproperties.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 {@Autowiredprivate Producer producer;@Overridepublic String createCaptchaText() {return producer.createText();}@Overridepublic BufferedImage createCaptchaImage(String captchaText) {return producer.createImage(captchaText);//图像验证码;}}