SpringBoot——整合kaptcha生成图片验证码

在常见网站上,用户需要登录时,不仅仅需要验证用户账号,密码信息,同时,还需要验证验证码。验证码通常是一组特殊的字符串,字符长度通常在4-6位。那么验证码是如何生成的呢,接下来,我将为大家介绍如何用SpringBoot整合kaptcha生成验证码信息。

1Kaptcha 简介

Kaptcha 是一个可高度配置的实用验证码生成工具,可自由配置的选项如:

验证码的字体
验证码字体的大小
验证码字体的字体颜色
验证码内容的范围(数字,字母,中文汉字!)
验证码图片的大小,边框,边框粗细,边框颜色
验证码的干扰线
验证码的样式(鱼眼样式、3D、普通模糊、…)

kaptcha官方介绍

2 SpringBoot 整合 Kaptcha
2.1导入依赖[springboot2.6.4]
      
      <!--验证码生成-->
        <dependency>
            <groupId>com.github.penggle</groupId>
            <artifactId>kaptcha</artifactId>
            <version>2.3.2</version>
        </dependency>

2.2 Kaptcha配置类
/**
 * 生成验证码配置
 * //可以设置很多属性,具体看com.google.code.kaptcha.Constants
 * kaptcha.border  是否有边框  默认为true  我们可以自己设置yes,no
 * kaptcha.border.color   边框颜色   默认为Color.BLACK
 * kaptcha.border.thickness  边框粗细度  默认为1
 * kaptcha.producer.impl   验证码生成器  默认为DefaultKaptcha
 * kaptcha.textproducer.impl   验证码文本生成器  默认为DefaultTextCreator
 * kaptcha.textproducer.char.string   验证码文本字符内容范围  默认为abcde2345678gfynmnpwx
 * kaptcha.textproducer.char.length   验证码文本字符长度  默认为5
 * kaptcha.textproducer.font.names    验证码文本字体样式  默认为new Font("Arial", 1, fontSize), >     //new Font("Courier", 1, fontSize)
 * kaptcha.textproducer.font.size   验证码文本字符大小  默认为40
 * kaptcha.textproducer.font.color  验证码文本字符颜色  默认为Color.BLACK
 * kaptcha.textproducer.char.space  验证码文本字符间距  默认为2
 * kaptcha.noise.impl    验证码噪点生成对象  默认为DefaultNoise
 * kaptcha.noise.color   验证码噪点颜色   默认为Color.BLACK
 * kaptcha.obscurificator.impl   验证码样式引擎  默认为WaterRipple
 * kaptcha.word.impl   验证码文本字符渲染   默认为DefaultWordRenderer
 * kaptcha.background.impl   验证码背景生成器   默认为DefaultBackground
 * kaptcha.background.clear.from   验证码背景颜色渐进   默认为Color.LIGHT_GRAY
 * kaptcha.background.clear.to   验证码背景颜色渐进   默认为Color.WHITE
 * kaptcha.image.width   验证码图片宽度  默认为200
 * kaptcha.image.height  验证码图片高度  默认为50
 **/
@Controller
public class KaptchaConfig {

    @Bean
    public Producer kaptchaProducer() {
        DefaultKaptcha captchaProducer = new DefaultKaptcha();
        Properties properties = new Properties();
        //字体颜色
        properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_COLOR, "black");
        //验证码宽 110px
        properties.setProperty(Constants.KAPTCHA_IMAGE_WIDTH, "110");
        //验证码高 40px
        properties.setProperty(Constants.KAPTCHA_IMAGE_HEIGHT, "40");
        //字体大小
        properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_SIZE, "30");
        //生成验证字符的长度
        properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4");
        //字体
        properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_NAMES, "宋体,楷体,微软雅黑");
        //验证码干扰项
        properties.setProperty(Constants.KAPTCHA_NOISE_IMPL,"com.google.code.kaptcha.impl.NoNoise");
        //验证字符选项 0-9及A-Z的组合 【可根据具体的情况,进行设置,汉字也同样可以作为验证符选项】
        properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_STRING,"0123456789ABCDEFGHIGKLMNOPQRSTUVWSYZ");
        Config config = new Config(properties);
        captchaProducer.setConfig(config);
        return captchaProducer;
    }
}

生成图片验证码的关键接口为 com.google.code.kaptcha.Producer,其中关键的方法
String createText() //创建验证码字符串
BufferedImage createImage(String text);//根据所给的字符串生成验证码图像

2.3 生成验证码图像
package com.nowcoder.community.controller;

import com.google.code.kaptcha.Producer;
import com.nowcoder.community.entity.CommunityConstant;
import com.nowcoder.community.entity.User;
import com.nowcoder.community.service.LoginService;
import com.nowcoder.community.service.UserService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;

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

@Controller
public class LoginController {

    @Autowired
    private Producer producer;

    /**
     * 获得生成的随机验证码
     * @param response
     * @param httpSession
     */
    @GetMapping("/login/getKapatchaImage")
    public void getKapatchaImage(HttpServletResponse response, HttpSession httpSession){
        //生成验证码
        String text = producer.createText();
        BufferedImage image = producer.createImage(text);

        //验证码字符串写入到session中.服务器将依托cookie 【key,value】value中存放的是当前生成的sessionid.
        //以后浏览器访问浏览器时,将会携带该cookie信息,使得多个浏览器请求中携带重要的信息【基于HTTP请求是无状态的,将验证字符串存入到session中,保存到服务中】
        httpSession.setAttribute("kapatchaStr", text);

        //图片响应给response
        //响应格式为.png的图片
        response.setContentType("image/png");
        try {
            ServletOutputStream outputStream = response.getOutputStream();
            //响应给浏览器的是验证码图片
            ImageIO.write(image,"png",outputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot整合Kaptcha,你可以按照以下步骤进行操作: 步骤1:添加Kaptcha依赖 在你的Spring Boot项目的pom.xml文件中,添加Kaptcha的依赖: ```xml <dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artifactId> <version>2.3.2</version> </dependency> ``` 步骤2:配置Kaptcha 在application.properties(或application.yml)文件中,添加以下配置: ```properties # Kaptcha Configurations kaptcha.border = no kaptcha.border.color = black kaptcha.textproducer.font.color = black kaptcha.image.width = 150 kaptcha.image.height = 50 kaptcha.textproducer.char.string = ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 kaptcha.textproducer.char.length = 4 kaptcha.noise.impl = com.google.code.kaptcha.impl.NoNoise kaptcha.background.clear.from = white kaptcha.background.clear.to = white kaptcha.textproducer.font.size = 40 ``` 步骤3:创建验证码接口 在你的控制器中创建一个用于生成验证码图片的接口,例如: ```java @RestController public class CaptchaController { @GetMapping("/captcha") public void getCaptcha(HttpServletRequest request, HttpServletResponse response) { // 创建DefaultKaptcha对象并配置参数 DefaultKaptcha kaptcha = new DefaultKaptcha(); Properties properties = new Properties(); properties.setProperty("kaptcha.border", "no"); properties.setProperty("kaptcha.textproducer.font.color", "black"); kaptcha.setConfig(new Config(properties)); // 生成验证码文本 String text = kaptcha.createText(); // 将验证码文本保存到session中 request.getSession().setAttribute("captcha", text); // 创建验证码图片并输出到response中 BufferedImage image = kaptcha.createImage(text); try { OutputStream out = response.getOutputStream(); ImageIO.write(image, "jpg", out); out.flush(); } catch (IOException e) { e.printStackTrace();

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值