SSM 项目 集成 kaptcha 验证码插件

kaptcha: 验证码插件,可以使用它生成自定义的验证码

1. 引入 kaptcha 插件依赖



    com.github.penggle
    kaptcha
    2.3.2

2. 编写 kaptcha 配置文件

在 resources 目录下创建 spring-kaptcha.xml 配置文件?:

SSM 项目 集成 kaptcha 验证码插件_第1张图片

具体的配置文件内容?:



    
    
        
            
                
                    
                        
                        120
                        
                        44
                        
                        0123456789AKWUEHPMRX
                        
                        4
                        
                        no
                        
                        105,179,90
                        
                        1
                        
                        black
                        
                        30
                        
                        楷体
                        
                        yellow
                        
                        8
                        
                        com.google.code.kaptcha.impl.ShadowGimpy
                    
                
            
        
    

 3. 将配置文件配置到 ssm 框架中

SSM 项目 集成 kaptcha 验证码插件_第2张图片

4. 编写验证码插件的 controller

创建 CaptchaController ?:

 

具体内容?:

package mr.s.controller;

import com.google.code.kaptcha.Constants;
import com.google.code.kaptcha.Producer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
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 {
    private Producer kaptchaProducer=null;

    @Autowired
    public void setCaptchaProducer(Producer kaptchaProducer) {
        this.kaptchaProducer = kaptchaProducer;
    }

    @RequestMapping("/getVerifyCode")
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response){
        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 capText = kaptchaProducer.createText();
        request.getSession().setAttribute("verifyCode", capText);
        BufferedImage bi = kaptchaProducer.createImage(capText);
        ServletOutputStream out = null;
        try {
            out = response.getOutputStream();
            ImageIO.write(bi, "jpg", out);
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            out.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
}

 5. 前端使用

SSM 项目 集成 kaptcha 验证码插件_第3张图片

温馨附上 οnclick="change()" 方法用来点击验证码图片,更换图片

function change() {
            $('#kaptchaImage').click(function () {
                $(this).attr('src', '${pageContext.request.contextPath}/getVerifyCode?' + Math.floor(Math.random() * 100));
            })
        }

展示如下?:

 

 6. 总结

对于上述的配置,通过 CaptchaController 中的 getVerifyCode 获取验证码图片,并同时将验证码图片的内容信息保存在 httpSession 中

你可能感兴趣的:(ssm)