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

一、CaptchaUtil代码展示

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 代码展示


@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,并打印异常信息。
  • 22
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吉屋安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值