网站favicon图标制作 pdo count phpmyadmin architecture vue添加class matlab停止运行命令 js空格符 bitlocker加密好慢 axure时间选择控件 wps文件修复工具下载 python数据 python配置环境 java语法 java集合转数组 java实例变量 javaabstract java读文件 java集成开发环境 linux内核编程 tar文件怎么打开 火牛软件 51脚本 系统工具箱 JScodeblocks汉化包 草图大师版本转换器 deallocate 海蜘蛛软路由 qq飞车刷车 红米3和红米3s的区别 联表查询 拼多多推广软件 studio3t CST软件 录像机下载 dnf不知火刷图加点 wow伤害数字显示 三星nvme驱动 流水账记账软件 迅雷解密
当前位置: 首页 > 学习教程  > 编程语言

整合Kaptcha验证码组件

2021/2/13 19:02:12 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

前言 最近在玩的一个小项目中&#xff0c;需要整合验证码&#xff0c;后来发现可以直接整合一个叫Kaptcha的验证码组件&#xff0c;Kaptcha 是一个可高度配置的实用验证码生成工具。整合这个东西也非常简单&#xff0c;直接开撸 引入依赖 <properties><kaptcha.ver…

前言

最近在玩的一个小项目中,需要整合验证码,后来发现可以直接整合一个叫Kaptcha的验证码组件,Kaptcha 是一个可高度配置的实用验证码生成工具。整合这个东西也非常简单,直接开撸

引入依赖

<properties>
    <kaptcha.version>0.0.9</kaptcha.version>
</properties>

<dependency>
    <groupId>com.github.axet</groupId>
    <artifactId>kaptcha</artifactId>
    <version>${kaptcha.version}</version>
</dependency>

集成DefaultKaptha

直接利用@Bean注解交给spring容器进行托管。

/**
 * autor:liman
 * createtime:2021/1/2
 * comment: 验证码配置类
 */
@Configuration
public class KaptchaConfig {

    @Bean
    public DefaultKaptcha producer() {
        Properties properties = new Properties();

        //是否有图片边框
        properties.setProperty("kaptcha.border", "no");
        //边框颜色
        properties.setProperty("kaptcha.border.color", "105,179,90");
        //字体颜色
        properties.setProperty("kaptcha.textproducer.font.color", "blue");
        //图片宽
        properties.setProperty("kaptcha.image.width", "135");
        //图片高
        properties.setProperty("kaptcha.image.height", "30");
        //字体大小
        properties.setProperty("kaptcha.textproducer.font.size", "30");
        //验证码长度
        properties.setProperty("kaptcha.textproducer.char.length", "5");
        //使用那些字符生成验证码
        properties.setProperty("kaptcha.textproducer.char.string", "ACDEFHKPRSTWX345679");
        //使用哪些字体
        properties.setProperty("kaptcha.textproducer.font.names", "Arial,Courier,cmr10,宋体,楷体,微软雅黑");
        //干扰线颜色
        properties.setProperty("kaptcha.noise.color", "black");
        //图片样式阴影
        properties.setProperty("kaptcha.obscurificator.impl", "com.google.code.kaptcha.impl.ShadowGimpy");

        Config config = new Config(properties);
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
        defaultKaptcha.setConfig(config);
        return defaultKaptcha;
    }
}

编写对应的接口

/**
 * 生成验证码
 */
@RequestMapping("/captcha.jpg")
public void getKaptcha(HttpServletResponse response) throws Exception{
    response.setHeader("Cache-Control", "no-store, no-cache");
    response.setContentType("image/jpeg");

    //生成文字验证码
    String text = producer.createText();
    //生成图片验证码
    BufferedImage image = producer.createImage(text);
    //保存到shiro session
    ShiroUtil.setSessionAttribute(Constants.KAPTCHA_SESSION_KEY, text);

    ServletOutputStream out = response.getOutputStream();
    ImageIO.write(image, "jpg", out);

    log.info("生成的验证码为:{}",text);
}

这里我们用到了shiro,在生成验证码之后,将生成的验证码通过shiro存入到session中,关于如何集成shiro可以参看这篇博客——shiro入门。

最后通过ServletOutputStream将图片文件流输入到前端。上述代码中的ImageIO来自于javax.imageio包中。

最终效果

在这里插入图片描述


本文链接: http://www.dtmao.cc/news_show_700264.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?