console.log(|

我是小杨

园龄:4年11个月粉丝:6关注:1

spring boot 图文验证码(Kaptcha)使用

如何使用
可以直接去官网http://code.google.com/p/kaptcha/下载jar,或者在pom.xml中导入
`

		<groupId>com.baomidou</groupId>

		<artifactId>kaptcha-spring-boot-starter</artifactId>

		<version>1.1.0</version>

	</dependency>

`
Kaptcha 详细配置表

业务代码


@Service
public class CaptchaService extends BaseService {
    @Resource(name = "captchaProducerMath")
    private Producer captchaProducerMath;
 
    @Autowired
    RedisOps redisOps;
 
 
    /**
     * 生成图片验证码
     */
    public DataRespBean<Map<String, Object>> getPictureCaptcha(HttpServletResponse response) throws IOException {
        String uuid = UUID.randomUUID().toString();
        String capStr = null, code = null;
        BufferedImage image = null;
        // 生成验证码
        String capText = captchaProducerMath.createText();
        //截取结果
        capStr = capText.substring(0, capText.lastIndexOf("@"));
        code = capText.substring(capText.lastIndexOf("@") + 1);
        image = captchaProducerMath.createImage(capStr);
        //结果存入redis,key为uuid 超时时间5分钟
        redisOps.set(RedisUtil.pictureCaptchaKey(uuid), code, 5 * 60); // 5分钟
        // 转换流信息写出
        FastByteArrayOutputStream outputStream= new FastByteArrayOutputStream();
        Map<String, Object> map = new HashMap<>();
        try {
            ImageIO.write(image, "jpg", outputStream);
        } catch (IOException e) {
            return new DataRespBean(ResultCodeMsg.SERVER_ERROR.getErrMsg(), e.getMessage());
        }finally {
            map.put("uuid", uuid);
            map.put("img", Base64Encoder.encode(outputStream.toByteArray()));
            os.close();
        }
        return new DataRespBean<>(map);
    }
}

验证码生成规则(根据实际需求修改)

public class KaptchaTextCreator extends DefaultTextCreator {
 
    private static final String[] NUMBER= "0,1,2,3,4,5,6,7,8,9,10".split(",");
 
    @Override
    public String getText() {
        Integer result = 0;//结果
        Random random = new Random();
        int x = random.nextInt(10);
        int y = random.nextInt(10);
        StringBuilder chinese = new StringBuilder();
        int randomop = (int) random.nextInt(4)
        //判断结果生成加减乘除
        switch (randomoperands){
            case 0 :
                result = x * y;
                chinese.append(NUMBER[x]);
                chinese.append("*");
                chinese.append(NUMBER[y]);
                break;
            case 1 :
                if (!x == 0 && y % x == 0) {
                    result = y / x;
                    chinese.append(NUMBER[y]);
                    chinese.append("/");
                    chinese.append(NUMBER[x]);
                } else {
                    result = x + y;
                    chinese.append(NUMBER[x]);
                    chinese.append("+");
                    chinese.append(NUMBER[y]);
                }
                break;
            case 2 :
                if (x >= y) {
                    result = x - y;
                    chinese.append(NUMBER[x]);
                    chinese.append("-");
                    chinese.append(NUMBER[y]);
                } else {
                    result = y - x;
                    chinese.append(NUMBER[y]);
                    chinese.append("-");
                    chinese.append(NUMBER[x]);
                }
                break;
            default:
                result = x + y;
                chinese.append(NUMBER[x]);
                chinese.append("+");
                chinese.append(NUMBER[y]);
        }
        //拼接结果返回
        suChinese.append("=?@" + result);
        return suChinese.toString();
    }

生成图片验证码配置


@Configuration
public class CaptchaConfig {
    @Bean(name = "captchaProducerMath")
    public DefaultKaptcha getKaptchaBeanMath() {
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
        Properties properties = new Properties();
        // 图片边框
        properties.setProperty(KAPTCHA_BORDER, "yes");
        // 边框颜色
        properties.setProperty(KAPTCHA_BORDER_COLOR, "105,179,90");
        // 文本颜色
        properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "blue");
        // 图片宽度 
        properties.setProperty(KAPTCHA_IMAGE_WIDTH, "130");
        // 图片高度 
        properties.setProperty(KAPTCHA_IMAGE_HEIGHT, "32");
        // 文本字符大小
        properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "28");
        // KAPTCHA_SESSION_KEY
        properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "KAPTCHA_SESSION_KEY");
        // 验证码文本生成器
        properties.setProperty(KAPTCHA_TEXTPRODUCER_IMPL, "对应自己的KaptchaTextCreator 文件路径");
        // 文本字符间距 
        properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_SPACE, "3");
        // 文本字符长度
        properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "6");
        // 文本字体样式
        properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier");
        // 干扰颜色
        properties.setProperty(KAPTCHA_NOISE_COLOR, "white");
        // 干扰实现类
        properties.setProperty(KAPTCHA_NOISE_IMPL, "com.google.code.kaptcha.impl.NoNoise");
        // 图片样式
        properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy");
        Config config = new Config(properties);
        defaultKaptcha.setConfig(config);
        return defaultKaptcha;
    }
}

返回结果(jpg base64编码)

效果展示

本文作者:我是小杨

本文链接:https://www.cnblogs.com/Liguangyang/p/17055945.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   我是小杨  阅读(395)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 小城夏天 REOL
小城夏天 - REOL
00:00 / 00:00
An audio error has occurred.

作词 : 陶旧

作曲 : 盛骁

编曲 : WayMen歪门/KENNY妮妮

制作人 : 蒋雪儿 Snow.J

橘黄色的日落 吞没在海平线

夜色慢慢摊开 露出星光点点

我听着耳机中jay的音乐

从等你下课 到手写的从前

冒泡汽水和你都是夏天感觉

着迷你眉间柔情似海的双眼

心动像风来的不知不觉

此刻 世界聚焦你的出现

wo~~~ say wo~~~

wo~~~ say wo~~~

我在小城夏天陪你遇见浪漫

晚风吹过耳畔你显得很好看

微醺的傍晚 时间过很慢

我在小城夏天遇见了另一半

这座城市有我的思念和喜欢

闷热的季节 因你而梦幻

橘黄色的日落 吞没在海平线

夜色慢慢摊开 露出星光点点

我听着耳机中j a y的音乐

从等你下课 到手写的从前

冒泡汽水和你都是夏天感觉

着迷你眉间柔情似海的双眼

心动像风来的不知不觉

此刻 世界聚焦你的出现

wo~~~ say wo~~~

wo~~~ say wo~~~

我在小城夏天陪你遇见浪漫

晚风吹过耳畔你显得很好看

微醺的傍晚 时间过很慢

我在小城夏天遇见了另一半

这座城市有我的思念和喜欢

闷热的季节 因你而梦幻

吉他 : 张赫伦/Kingtheta

混音师 : LBI利比

和声 : LBI利比

监制 : 蒋雪儿 Snow.J

统筹 : 柯自俊

OP : 青风音乐Cheerful Music

SP : 乐无限Eternal Music

【未经授权不得翻唱或使用】