一、图形验证码
上一节实现了自定义数据库的验证,这里使用过滤器实现图形验证码。图形验证码也是登录时,常用的项目之一。
这里使用验证码(CAPTCHA),验证码就是为了防止恶意用户暴力重试而设置的,防止恶意用户使用程序发起无限重试,使系统遭到破坏
二、图形验证码实现
这里使用kaptcha组件来获取验证码
添加依赖
<dependency>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
</dependency>
配置kaptcha实例
/**
* 配置kaptcha实例
* @return
*/
@Bean
public Producer captcha(){
//配置图形验证码的基本参数
Properties properties = new Properties();
//图片宽度
properties.setProperty("kaptcha.image.width","150");
//图片长度
properties.setProperty("kaptcha.image.height","50");
//字符集
properties.setProperty("kaptcha.textproducer.char.string","0123456789");
//字符长度
properties.setProperty("kaptcha.textproducer.char.length","4");
Config config = new Config(properties);
//使用默认的图形验证码实现,当然也可以自定义实现
DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
defaultKaptcha.setConfig(config);
return defaultKaptcha;
}
获取图形验证码的Controller
其中验证码的文本被放在session中,使用时会从session中取出验证码用于后续的校验
package com.example.controller;
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 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 c