kaptcha图片验证码

Posted 温文艾尔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kaptcha图片验证码相关的知识,希望对你有一定的参考价值。

谷歌kaptcha图片验证码的使用


前言

验证码可以有效的防止重复提交表单数据,防止来自其他人的恶意攻击,在现代网站中有着广泛的运用,本次我们来使用谷歌kaptcha验证码,为传统4-5位数字+字母类型验证码


提示:以下是本篇文章正文内容,下面案例可供参考

一、引入依赖

、谷歌验证码依赖。

        <!--谷歌验证码依赖-->
        <dependency>
            <groupId>com.github.axet</groupId>
            <artifactId>kaptcha</artifactId>
            <version>0.0.9</version>
        </dependency>

二、kaptcha配置

1.配置类

代码如下(示例):

package com.wql.server.config;

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;

/**配置验证码
 * Description
 * User:
 * Date:
 * Time:
 */
@Configuration
public class CaptchaConfig {

    @Bean
    public DefaultKaptcha getDefaultKaptcha(){
        //验证码生成器
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
        //配置
        Properties properties = new Properties();
        //是否有边框
        properties.setProperty("kaptcha.border", "yes");
        //设置边框颜色
        properties.setProperty("kaptcha.border.color", "105,179,90");
        //边框粗细度,默认为1
        // properties.setProperty("kaptcha.border.thickness","1");
        //验证码
        properties.setProperty("kaptcha.session.key","code");
        //验证码文本字符颜色 默认为黑色
        properties.setProperty("kaptcha.textproducer.font.color", "blue");
        //设置字体样式
        properties.setProperty("kaptcha.textproducer.font.names", " 宋体,楷体,微软雅黑");
        //字体大小,默认40
        properties.setProperty("kaptcha.textproducer.font.size", "30");
        //验证码文本字符内容范围默认为abced2345678gfynmnpwx
        // properties.setProperty("kaptcha.textproducer.char.string", "");
        //字符长度,默认为5
        properties.setProperty("kaptcha.textproducer.char.length", "4");
        //字符间距默认为2
        properties.setProperty("kaptcha.textproducer.char.space", "4");
        //验证码图片宽度默认为200
        properties.setProperty("kaptcha.image.width", "100");
        //验证码图片高度默认为40
        properties.setProperty("kaptcha.image.height", "40");
        Config config = new Config(properties);
        defaultKaptcha.setConfig(config);
        return defaultKaptcha;
    }
}

2.接口信息

代码如下(示例):

package com.wql.server.controller;

import com.google.code.kaptcha.impl.DefaultKaptcha;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

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

/**验证码
 * Description
 * User:
 * Date:
 * Time:
 */
@Api(tags = "验证码请求")
@RestController
public class CaptchaController {

    @Autowired
    private DefaultKaptcha defaultKaptcha;

    @ApiOperation("验证码")
    @GetMapping(value="/captcha",produces = "image/jpeg")
    public void captcha(HttpServletRequest request,HttpServletResponse response){

        //定义response输出类型为image/jpeg类型
        response.setDateHeader("Expires", 0);
        // Set standard HTTP/1.1 no-cache headers.
        response.setHeader("Cache-Control", "no-store, no-cache, must revalidate");
        // Set IE extended HTTP/1.1 no-cache headers (use addHeader).
        response.addHeader("Cache-Control", "post-check=0, pre-check=0");
        // Set standard HTTP/1.0 no-cache header.
        response.setHeader("Pragma", "no-cache");
        // return a jpeg
        response.setContentType("image/jpeg");


        //---------生成验证码----------
        //获取验证码文本内容,并将其放入session中进行传输
        String text = defaultKaptcha.createText();
        System.out.println("验证码的内容是:"+text);
        request.getSession().setAttribute("captcha",text);

        //根据验证码文本内容创建图片
        BufferedImage bimg = defaultKaptcha.createImage(text);
        ServletOutputStream out = null;
        try {
            out  = response.getOutputStream();
            ImageIO.write(bimg,"jpg",out);
            out.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(null!=out){
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

二、在Swagger中进行测试

发送验证码请求后:
在这里插入图片描述
我们可以看见已经生成了验证码,且为
4pgc

我们在登录中进行测试
首先输入错误的验证码:
在这里插入图片描述
测试成功
再输入正确的验证码
在这里插入图片描述
测试成功


以上是关于kaptcha图片验证码的主要内容,如果未能解决你的问题,请参考以下文章

kaptcha谷歌验证码工具

验证码 kaptcha 参数详解

kaptcha 验证码组件使用

kaptcha验证码框架

利用Kaptcha.jar生成图片验证码(以下源码可以直接复制并自定义修改)

java 实现登录验证码 (kaptcha 验证码组件)