关于Kaptcha?
kaptcha 是一个验证码生成工具,并且可以自定义配置验证码的样式,如果不自定义也可以使用其默认配置,非常方便。
使用步骤:
1.导入maven依赖
<dependency>
<groupId>com.github.axet</groupId>
<artifactId>kaptcha</artifactId>
<version>0.0.9</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.5.2</version>
</dependency>
2.将Kaptcha注册到ioc容器中
@Configuration
public class KaptchaConfig {
@Bean
public DefaultKaptcha defaultKaptcha(){
DefaultKaptcha kaptcha=new DefaultKaptcha();
Properties properties=new Properties();
properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_NAMES,"微软雅黑");
properties.setProperty(Constants.KAPTCHA_BORDER,"yes");
properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_LENGTH,"5");
Config config=new Config(properties);
kaptcha.setConfig(config);
return kaptcha;
}
}
注意: 以上代码使用了自定义配置,即:使用Properties对象自定义了一些属性,从而达到自定义验证码样式的效果。当然,如果不自定义属性,想用其默认配置,那么将只需要将上述代码换成以下即可:DefaultKaptcha kaptcha =new DefaultKaptcha();kaptcha.setConfig(new Config(new Properties)); return kaptcha;
3.写一个controller类
@Controller
public class getKaptchaCode {
@Autowired
private DefaultKaptcha kaptcha;
@RequestMapping("/getCode")
public void createCode(HttpServletRequest request, HttpServletResponse response) throws IOException {
//创建验证码字符串
String code = kaptcha.createText();
//将验证码存入session中
request.getSession().setAttribute("kaptchaCode",code);
//将验证码字符串转化成图片
BufferedImage image = kaptcha.createImage(code);
ServletOutputStream outputStream = response.getOutputStream();
//使用IO将图片返回给浏览器
ImageIO.write(image,"jpg",outputStream);
//关闭流,节约资源
outputStream.close();
}
//接收浏览器端发送的验证码,和session中的验证码做对比---作登录校验
@RequestMapping("/testCode")
@ResponseBody
public String testCode(String code,HttpServletRequest request){
System.out.println("验证码是:"+code);
String kaptchaCode= (String) request.getSession().getAttribute("kaptchaCode");
if(code!=null&&code.equals(kaptchaCode)){
return "Login success";
}
return "Login again please";
}
}
4.测试
1.发起请求:http://localhost:8080/getCode
结果:
2.发起请求:http://localhost:8080/testCode?code=83fm7
浏览器输出:Login success
Over!!