首页 > 其他分享 >kaptcha验证码使用

kaptcha验证码使用

时间:2023-03-14 16:36:42浏览次数:67  
标签:kaptcha 使用 验证码 KAPTCHA import com properties

kaptcha介绍

Kaptcha 是一个可高度配置的实用验证码生成工具,已经存在很久了,比较稳定,可自由配置的选项如:

1.验证码的字体
2.验证码字体的大小
3.验证码字体的字体颜色
4.验证码内容的范围(数字,字母,中文汉字!)
5.验证码图片的大小,边框,边框粗细,边框颜色
6.验证码的干扰线
7.验证码的样式(鱼眼样式、3D、普通模糊、…)

快速上手

导入依赖

官网地址 http://code.google.com/p/kaptcha/

<dependency>
    <groupId>com.github.penggle</groupId>
    <artifactId>kaptcha</artifactId>
    <version>2.3.2</version>
</dependency>

或者

<dependency>
    <groupId>com.google.code.kaptcha</groupId>
    <artifactId>kaptcha</artifactId>
    <version>2.3</version>
</dependency>

代码

配置类: CaptchaConfig.java


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.*;

/**
 * 验证码配置类
 */
@Configuration
public class CaptchaConfig {

    @Bean(name = "captchaProducer")
    public DefaultKaptcha getKaptchaBean() {
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
        Properties properties = new Properties();
        // 是否有边框 默认为true 我们可以自己设置yes,no
        properties.setProperty(KAPTCHA_BORDER, "yes");
        // 验证码文本字符颜色 默认为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
        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;
    }
}

验证码接口

CaptchaController.java


import com.google.code.kaptcha.impl.DefaultKaptcha;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.image.BufferedImage;
import java.io.IOException;

/**
 * 验证码接口
 */
@RestController
public class CaptchaController {
    @Autowired
    private DefaultKaptcha defaultKaptcha;

    @GetMapping("/img")
    public void captchaImg(HttpServletResponse response) throws IOException {
        //生成验证码文本
        String text = defaultKaptcha.createText();
        BufferedImage image = defaultKaptcha.createImage(text);
        ImageIO.write(image, "jpg", response.getOutputStream());

    }
    @GetMapping("/getImgCode")
    public String getImgCode(HttpSession session){
        String imgCode = (String)session.getAttribute("kaptchaCode");
        System.out.println(" 验证码为" + imgCode);
        return imgCode;
    }
}

接口测试

image

配置分析

	// KAPTCHA_SESSION_KEY
        properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCode");

上面这段代码是把生成的字符串文本存到session里,但是经过测试从HttpSession中获取不到

image

控制台打印为null

image

若需要让session配置生效,需使用kaptcha自带的servlet,要注册进spring容器中
todo..

标签:kaptcha,使用,验证码,KAPTCHA,import,com,properties
From: https://www.cnblogs.com/lichunbo/p/17215353.html

相关文章

  • 使用简略语法传入 lambda 值参
    在Kotlin中,可以使用简略语法传入Lambda表达式作为函数的参数。如果函数的最后一个参数是一个Lambda表达式,那么可以将该表达式写在调用括号外面,并使用大括号{}包裹......
  • shell使用-awk
    工作原理:当读到第一行时,匹配条件,然后执行指定动作,再接着读取第二行数据处理,不会默认输出。如果没有定义匹配条件默认是匹配所有数据行,awk隐含循环,条件匹配多少次动作就会执......
  • java8 Optional使用 stream filter多级过滤
    java8Optional使用streamfilter多级过滤packagecom.example.core.mydemo.java8;publicclassMyModel{privateStringcouponCode;privateIntegeror......
  • asp.net core3.1 使用RenderSection和Section
     我们使用公共文件,常常会用到同样的头部和尾部,那么就可以使用了    <!DOCTYPEhtml><html><head><metaname="viewport"content="width=device-widt......
  • shell使用-基本正则和常用例子
    元字符描述\将下一个字符标记符、或一个向后引用、或一个八进制转义符。例如,“\\n”匹配\n。“\n”匹配换行符。序列“\\”匹配“\”而“\(”则匹配“(”。......
  • Ubuntu22.10 使用命令安装 MongoDB6.0 并配置
     安装mongodbapt-getinstallgnupgwget-qO-https://www.mongodb.org/static/pgp/server-6.0.asc|apt-keyadd-echo"deb[arch=amd64,arm64]https://repo......
  • Node.js 中使用 Playwright 定位到一个 iframe
      要在Node.js中使用Playwright定位到一个iframe并获取其在屏幕中的位置,可以按照以下步骤进行:1.使用`page.frame()`方法获取iframe元素的句柄:```javas......
  • 第六节:Git常用指令汇总和常见使用场景剖析
    一.        二.        三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblog......
  • less & saas/scss & css 深度选择器语法在 Vue2 & Vue3中的使用
    vue2中原生css>>>.el-card__header saas\scss::v-deep.el-card__headerless/deep/.el-card__header vue3中:deep(){......
  • 在Abp中使用依赖注入
    依赖注入是一种设计模式,这里主要讨论如何在Abp中使用依赖注入。注册依赖项在Abp中我们有很多种方法来注册依赖项,大多数情况下通过约定来注册依赖项就足够了。这也是......