springboot生成图片验证码(借鉴并分析)

目录

一、CaptchaUtil代码展示

java 复制代码
package com.minster.yanapi.utils;

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;



@Configuration
public class CaptchaUtil{

    @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");
        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", "宋体,楷体,微软雅 黑");
   
        properties.setProperty("kaptcha.textproducer.font.size", "30");
        properties.setProperty("kaptcha.textproducer.char.length", "4");
      
        properties.setProperty("kaptcha.textproducer.char.space", "4");
     
        properties.setProperty("kaptcha.image.width", "100");
    
        properties.setProperty("kaptcha.image.height", "40");
        Config config = new Config(properties);
        defaultKaptcha.setConfig(config);
        return defaultKaptcha;
    }


}

这段代码是一个基于Spring框架的验证码配置类,主要用于配置验证码生成器的属性和参数。

  1. @Configuration 注解标识这是一个配置类,用于定义 Spring Bean。

  2. CaptchaUtil 类定义了一个名为 getDefaultKaptcha 的方法,该方法使用 @Bean 注解,表示它会被Spring容器管理,并作为一个Bean提供。

  3. getDefaultKaptcha 方法中,创建了 DefaultKaptcha 类的实例,这是一个基于Google Kaptcha库的验证码生成器。

  4. 通过 Properties 对象配置验证码生成器的各种属性。以下是一些主要的配置项:

    • kaptcha.border: 是否有边框,这里设置为 "yes"。
    • kaptcha.border.color: 边框颜色,这里设置为 "105,179,90"。
    • kaptcha.session.key: 存储验证码的 session key,这里设置为 "code"。
    • kaptcha.textproducer.font.color: 验证码文本字符颜色,这里设置为 "blue"。
    • kaptcha.textproducer.font.names: 字体样式,这里设置为 "宋体,楷体,微软雅黑"。
    • kaptcha.textproducer.font.size: 字体大小,这里设置为 "30"。
    • kaptcha.textproducer.char.length: 验证码字符长度,这里设置为 "4"。
    • kaptcha.textproducer.char.space: 字符间距,这里设置为 "4"。
    • kaptcha.image.width: 验证码图片宽度,这里设置为 "100"。
    • kaptcha.image.height: 验证码图片高度,这里设置为 "40"。
  5. 创建一个 Config 对象,并将之前配置的 Properties 对象传递给它,用于构建验证码生成器的配置。

  6. 将配置好的 Config 对象设置到 DefaultKaptcha 实例中。

  7. 最后,返回配置好的 DefaultKaptcha 实例。

总体来说,这个配置类的作用是创建和配置一个用于生成验证码的 DefaultKaptcha Bean,并通过Spring容器进行管理。该验证码生成器的外观和行为由一系列属性值定义,这些属性值可以在配置中进行调整,以满足具体的需求。

二、CaptchaController 代码展示

java 复制代码
@RestController
@RequestMapping("/code")
public class CaptchaController {

    @Autowired
    private DefaultKaptcha defaultKaptcha;

    @GetMapping( "/captcha")
    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);
        //将验证码放到session中
        request.getSession().setAttribute("captcha",text);
        //根据文本内容创建图形验证码
        BufferedImage image = defaultKaptcha.createImage(text);
        ServletOutputStream outputStream = null;
        try {
            outputStream = response.getOutputStream();
            //输出流输出图片,格式为jpg
            ImageIO.write(image,"jpg",outputStream);
            outputStream.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (outputStream != null){
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

上述代码是一个基于Spring框架的Java类,使用@RestController注解标识为一个RESTful风格的控制器,处理与验证码相关的HTTP请求。以下是对代码的详细分析:

  1. 类注解:

    • @RestController: 表示这是一个控制器类,并且所有方法都以JSON格式返回响应。
  2. 类声明:

    • @RequestMapping("/code"): 定义了类级别的请求映射,表示处理所有以"/code"开头的请求。
  3. 字段注入:

    • private DefaultKaptcha defaultKaptcha: 使用@Autowired注解进行依赖注入,注入了一个名为defaultKaptcha的DefaultKaptcha类型的Bean。
  4. 方法定义:

    • @GetMapping("/captcha"): 处理HTTP GET请求,映射路径为"/code/captcha"。
    • public void captcha(HttpServletRequest request, HttpServletResponse response): 处理验证码请求的方法,接受HttpServletRequest和HttpServletResponse作为参数。
  5. 验证码生成与输出:

    • 设置响应头,禁用缓存,确保验证码每次都是新的。
    • 获取验证码文本内容:String text = defaultKaptcha.createText();
    • 将验证码文本放入Session中:request.getSession().setAttribute("captcha", text);
    • 创建图形验证码:BufferedImage image = defaultKaptcha.createImage(text);
    • 获取输出流:ServletOutputStream outputStream = response.getOutputStream();
    • 将验证码图片以JPEG格式写入输出流:ImageIO.write(image, "jpg", outputStream);
    • 关闭输出流。
  6. 异常处理:

    • 在输出流操作中使用了try-catch块捕获IOException,并打印异常信息。
相关推荐
程序员南飞1 小时前
ps aux | grep smart_webrtc这条指令代表什么意思
java·linux·ubuntu·webrtc
弥琉撒到我1 小时前
微服务swagger解析部署使用全流程
java·微服务·架构·swagger
一颗花生米。2 小时前
深入理解JavaScript 的原型继承
java·开发语言·javascript·原型模式
问道飞鱼2 小时前
Java基础-单例模式的实现
java·开发语言·单例模式
ok!ko6 小时前
设计模式之原型模式(通俗易懂--代码辅助理解【Java版】)
java·设计模式·原型模式
2401_857622666 小时前
SpringBoot框架下校园资料库的构建与优化
spring boot·后端·php
2402_857589366 小时前
“衣依”服装销售平台:Spring Boot框架的设计与实现
java·spring boot·后端
吾爱星辰7 小时前
Kotlin 处理字符串和正则表达式(二十一)
java·开发语言·jvm·正则表达式·kotlin
哎呦没8 小时前
大学生就业招聘:Spring Boot系统的架构分析
java·spring boot·后端
编程、小哥哥8 小时前
netty之Netty与SpringBoot整合
java·spring boot·spring