首页 > 其他分享 >图形验证码功能实现

图形验证码功能实现

时间:2022-08-16 16:47:34浏览次数:51  
标签:功能 kaptcha 验证码 response setProperty import 图形 properties

1、引入依赖:

<!-- google kaptcha 验证码 -->
<dependency>
  <groupId>com.github.axet</groupId>
  <artifactId>kaptcha</artifactId>
  <version>0.0.9</version>
</dependency>

2、配置文件

package cn.laoyao.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;

/** 验证码配置类
 * @author bing  @create 2021/1/15-下午7:38
 */
@Configuration
public class CaptchaConfig {

    @Bean
    public DefaultKaptcha defaultKaptcha(){
        // 验证码生成器
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
        // 配置
        Properties properties = new Properties();
        // 是否有边框
        properties.setProperty("kaptcha.border","yes");
        // 设置边框颜色
        //properties.setProperty("kaptcha.border.color","105,179,90");
        properties.setProperty("kaptcha.border.color","224,224,224");
        // 边框粗细度,默认为1
        properties.setProperty("kaptcha.border.thickness","1");
        // 设置验证码文本字符颜色,默认黑色
        //properties.setProperty("kaptcha.textproducer.font.color", "blue");
        // 设置字体样式
        properties.setProperty("kaptcha.textproducer.font.names", "微软雅黑");
        //properties.setProperty("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑");
        // 验证码 session key
        properties.setProperty("kaptcha.session.key", "code");
        // 验证码图片宽度,默认为 200
        properties.setProperty("kaptcha.image.width", "100");
        // 验证码图片高度,默认为40
        properties.setProperty("kaptcha.image.height", "40");
        // 字体大小
        properties.setProperty("kaptcha.textproducer.font.size", "30");
        // 验证码长度
        properties.setProperty("kaptcha.textproducer.char.length", "4");
        // 没有干扰
        properties.setProperty("kaptcha.noise.impl", "com.google.code.kaptcha.impl.NoNoise");// 没有干扰

        Config config = new Config(properties);
        defaultKaptcha.setConfig(config);

        return defaultKaptcha;
    }
}

3、controller接口实现

package cn.laoyao.server.controller;

import com.google.code.kaptcha.impl.DefaultKaptcha;
import io.swagger.annotations.ApiOperation;
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.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.IOException;

/**
 * 验证码控制器
 *
 * @author bing  @create 2021/1/15-下午7:54
 */
@RestController
public class CaptchaController {

    @Autowired
    private DefaultKaptcha defaultKaptcha;

    @ApiOperation(value = "验证码")
    @GetMapping(value = "/captcha",produces = "image/jpeg")
    public void captcha(HttpServletRequest request, HttpServletResponse response) {
        // 定义 response 输出类型为 image/jpeg 类型
        response.setDateHeader("Expires", 0);
        response.setHeader("Cache-Control", "no-store,no-cache,must-revalidate");
        response.addHeader("Cache-Control", "post-check=0,pre-check=0");
        response.setHeader("Pragma", "no-cache");
        response.setContentType("image/jpeg");
        // 生成验证码 开始
        String text = defaultKaptcha.createText(); // 获取验证码文本内容
        System.out.println("验证码文本内容:" + text);
        request.getSession().setAttribute("captcah", text);
        BufferedImage image = defaultKaptcha.createImage(text); // 根据文本内容创建图形验证码
        ServletOutputStream outputStream = null;
        try {
            outputStream = response.getOutputStream();
            ImageIO.write(image,"jpg",outputStream); // 输出流输出图片,格式为jpg
            outputStream.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (null!=outputStream) {
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        // 生成验证码 结束
        // 查看验证码: http://localhost:8081/captcha

    }
}

4、测试







标签:功能,kaptcha,验证码,response,setProperty,import,图形,properties
From: https://www.cnblogs.com/zlaoyao/p/16592053.html

相关文章

  • 3 基于forms组件 & ajax实现注册功能 & 头像预览功能
    1基于forms组件设计注册页面register.html{%loadstatic%}<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><......
  • 【StoneDB研发日志】union功能bug记录
    1、问题现象createdatabasesyw_mtr;usesyw_mtr;CREATETABLEt1(f1VARCHAR(255)CHARACTERSETutf8)engine=tianmu;CREATETABLEt2ASSELECTLEFT(f1,171)AS......
  • 案例_验证码
    案例_验证码案例需求:访问带有验证码的登录页面login.jsp用户输入用户名密码以及验证码如果用户名和密码输入有误跳转登录页面提示:用户名或密码错误如果验证码......
  • “支付功能”怎么测试么?
    作为测试,不管是面试还是笔试,必然要被考验到的就是”测试思维“。在面试中就是体现在如下面试题中:“说说你项目中的xx模块你是如何测试的?”“给你一个购物车,你要怎么测......
  • SAP 电商云 Assisted Service Module (ASM) 功能模块讲解
    使用ASM,客户销售和服务代表可以:查找客户的帐户和会话,或匿名购物车将客户分配到匿名购物车(反之亦然)代表客户创建新客户帐户在产品目录、购物车和结账流程中提供销售支......
  • Vue+Leaflet.PM插件实现创建和编辑几何图形(点、线、面、圆等)
    场景Vue+Leaflet实现加载OSM显示地图:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/122317394在上面加载显示OSM的基础上,使用Leaflet.pm插件实现在页面上......
  • 取消vim粘贴时自动注释功能
    vim在粘贴内容的时候,如果遇到以#开始的注释行,会自动将后续的所有行进行注释。也许这个功能在某些情况下是很有用的,但很多时候是不需要的。解决方案:在粘贴之前默认模式下输......
  • DBPack 限流熔断功能发布说明
    上周我们发布了v0.4.0版本,增加了限流熔断功能,现对这两个功能做如下说明。限流DBPack限流熔断功能通过filter实现。要设置限流规则,首先要定义RateLimitFilter:-......
  • Xmind思维导图教程:如何在Xmind中启用听写功能?
    Xmind2022Mac是一款非常便捷的制作思维导图的软件,制作思维导图可以帮助用户更高效的进行学习,在如何启用听写功能呢?下面我们分享具体的操作步骤。1、在Mac电脑中打开Xmind......
  • js实现简单的产品搜索功能
      实现产品搜索功能的表格                div和tbody部分:                    js......