在Spring Boot中自定义实现图形验证码

在 Spring Boot 应用中实现图形验证码功能,通常可以通过第三方库如 kaptcha 或 java.awt 包结合 javax.imageio 来完成。这里我将分别介绍如何使用 kaptcha 库和纯 Java 的方式来实现图形验证码。

图片[1]_在Spring Boot中自定义实现图形验证码_知途无界

使用 Kaptcha 实现图形验证码

1. 添加 Kaptcha 依赖

首先,你需要在你的 pom.xml 文件中添加 Kaptcha 的依赖。注意,由于 Kaptcha 的最新版本可能比较旧,你可能需要查找一个适合你的项目的版本。

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

2. 配置 Kaptcha

在你的 Spring Boot 配置类中配置 Kaptcha。

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 KaptchaConfig {  
  
    @Bean  
    public DefaultKaptcha getDefaultKaptcha() {  
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();  
        Properties properties = new Properties();  
        // 配置文字  
        properties.put("kaptcha.textproducer.font.color", "black");  
        properties.put("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑");  
        properties.put("kaptcha.textproducer.char.length", "4");  
        properties.put("kaptcha.textproducer.char.space", "3");  
        // 配置图片样式  
        properties.put("kaptcha.image.width", "125");  
        properties.put("kaptcha.image.height", "45");  
        properties.put("kaptcha.image.border", "no");  
        properties.put("kaptcha.border.color", "105,179,90");  
        properties.put("kaptcha.textproducer.font.size", "36");  
        // 验证码存入 session 的 key  
        properties.put("kaptcha.session.key", "captchaCode");  
        // 验证码图片上的文字干扰线  
        properties.put("kaptcha.noise.impl", "com.google.code.kaptcha.impl.DefaultNoise");  
        properties.put("kaptcha.noise.color", "black");  
        // 验证码干扰颜色,合法值: r,g,b 或者 white,black,blue.  
        Config config = new Config(properties);  
        defaultKaptcha.setConfig(config);  
        return defaultKaptcha;  
    }  
}

3. 创建验证码接口

import com.google.code.kaptcha.Producer;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.stereotype.Controller;  
import org.springframework.web.bind.annotation.GetMapping;  
import org.springframework.web.servlet.ModelAndView;  
  
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;  
  
@Controller  
public class CaptchaController {  
  
    @Autowired  
    private Producer captchaProducer;  
  
    @GetMapping("/captcha.jpg")  
    public void getCaptcha(HttpServletRequest request, HttpServletResponse response) throws IOException {  
        // 生产验证码字符串,保存到 session 中  
        String capText = captchaProducer.createText();  
        request.getSession().setAttribute("captchaCode", capText);  
  
        // 创建图片  
        BufferedImage bi = captchaProducer.createImage(capText);  
  
        // 禁止浏览器缓存  
        response.setHeader("Pragma", "No-cache");  
        response.setHeader("Cache-Control", "no-cache");  
        response.setDateHeader("Expires", 0);  
  
        // 告诉浏览器输出内容为图片  
        response.setContentType("image/jpeg");  
  
        // 将图片写给浏览器  
        ServletOutputStream out = response.getOutputStream();  
        ImageIO.write(bi, "jpg", out);  
        try {  
            out.flush();  
        } finally {  
            out.close();  
        }  
    }  
}

© 版权声明
THE END
喜欢就点个赞,支持一下吧!
点赞74 分享
评论 抢沙发
头像
欢迎您留下评论!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容