3. Kaptcha验证码组件使用

文章目录

在pom.xml中添加依赖

<!-- 1. 添加kaptcha的依赖      -->
        <dependency>
            <groupId>com.github.penggle</groupId>
            <artifactId>kaptcha</artifactId>
            <version>2.3.2</version>
        </dependency>

在applicationContext.xml中进行配置

<!-- 配置Kaptcha   -->
    <bean id="kaptcheProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
        <property name="config">
            <bean class="com.google.code.kaptcha.util.Config">
                <constructor-arg>
                    <props>
                        <!-- 验证码图片不生成边框  -->
                        <prop key="kaptcha.border">no</prop>
                        <!-- 验证码图片宽度为120px  -->
                        <prop key="kaptcha.image.width">120</prop>
                        <!-- 验证码图片字体颜色为blue  -->
                        <prop key="kaptcha.textproducer.font.color">blue</prop>
                        <!-- 验证码图片每个字符最大占用40个像素-->
                        <prop key="kaptcha.textproducer.font.size">40</prop>
                        <!-- 验证码图包含四个字符-->
                        <prop key="kaptcha,textproducer.char.length">4</prop>
                        
                    </props>
                </constructor-arg>
            </bean>
        </property>
    </bean>

KaptchaController.java

package com.imooc.reader.controller;

import com.google.code.kaptcha.Producer;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

import javax.annotation.Resource;
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 KaptchaController {
    @Resource
    private Producer kaptcheProducer;

    /**
     * 参数为两个原生对象
     * SpringMvc底层还是依赖于将j2ee的web模块也就是servelet,我们在实际开发中,有一些特殊的场景必须要使用到原生的请求或者响应对象,
     * 此时就可以如下书写方式,把原生对象放在参数列表中,这样在运行时会动态注入
     * @param request
     * @param response
     */
    @GetMapping("/verify_code")
    public void createVerifyCode(HttpServletRequest request, HttpServletResponse response){
//        响应立即过期
        response.setDateHeader("Expires", 0); // 设置过期时间
//        不缓存任何图片数据
        response.setHeader("Cache-Control", "no-store, no-cache, must-revalidation");
        response.setHeader("Cache-Control", "post=check=0,pre-check=0");
        response.setHeader("Pragma", "no-cache");
        response.setContentType("image/png");
//      生成验证码字符文本
        String verifyCode = kaptcheProducer.createText();
//        将验证码保存到了当前会话当中
        request.getSession().setAttribute("kaptchaVerifyCode", verifyCode);
        System.out.println(request.getSession().getAttribute("kaptchaVerifyCode"));
        BufferedImage image = kaptcheProducer.createImage(verifyCode);// 根据验证码文本创建验证码图片
        ServletOutputStream out = null;  // 由于图片是二进制,所以用outputstream,如果不是二进制,用getWriter
        try {
            out = response.getOutputStream();
            ImageIO.write(image, "png", out);
            out.flush(); // 立即输出
            out.close();  // 关闭输出流
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值