SpringBoot:kaptcha生成验证码

         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();
}

 

BufferedImage类

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);//图像验证码;
    }


}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是席木木啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值