kaptcha图片验证码
Posted 温文艾尔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kaptcha图片验证码相关的知识,希望对你有一定的参考价值。
谷歌kaptcha图片验证码的使用
前言
验证码可以有效的防止重复提交表单数据,防止来自其他人的恶意攻击,在现代网站中有着广泛的运用,本次我们来使用谷歌kaptcha验证码,为传统4-5位数字+字母类型验证码
提示:以下是本篇文章正文内容,下面案例可供参考
一、引入依赖
、谷歌验证码依赖。
<!--谷歌验证码依赖-->
<dependency>
<groupId>com.github.axet</groupId>
<artifactId>kaptcha</artifactId>
<version>0.0.9</version>
</dependency>
二、kaptcha配置
1.配置类
代码如下(示例):
package com.wql.server.config;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;
/**配置验证码
* Description
* User:
* Date:
* Time:
*/
@Configuration
public class CaptchaConfig {
@Bean
public DefaultKaptcha getDefaultKaptcha(){
//验证码生成器
DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
//配置
Properties properties = new Properties();
//是否有边框
properties.setProperty("kaptcha.border", "yes");
//设置边框颜色
properties.setProperty("kaptcha.border.color", "105,179,90");
//边框粗细度,默认为1
// properties.setProperty("kaptcha.border.thickness","1");
//验证码
properties.setProperty("kaptcha.session.key","code");
//验证码文本字符颜色 默认为黑色
properties.setProperty("kaptcha.textproducer.font.color", "blue");
//设置字体样式
properties.setProperty("kaptcha.textproducer.font.names", " 宋体,楷体,微软雅黑");
//字体大小,默认40
properties.setProperty("kaptcha.textproducer.font.size", "30");
//验证码文本字符内容范围默认为abced2345678gfynmnpwx
// properties.setProperty("kaptcha.textproducer.char.string", "");
//字符长度,默认为5
properties.setProperty("kaptcha.textproducer.char.length", "4");
//字符间距默认为2
properties.setProperty("kaptcha.textproducer.char.space", "4");
//验证码图片宽度默认为200
properties.setProperty("kaptcha.image.width", "100");
//验证码图片高度默认为40
properties.setProperty("kaptcha.image.height", "40");
Config config = new Config(properties);
defaultKaptcha.setConfig(config);
return defaultKaptcha;
}
}
2.接口信息
代码如下(示例):
package com.wql.server.controller;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
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;
/**验证码
* Description
* User:
* Date:
* Time:
*/
@Api(tags = "验证码请求")
@RestController
public class CaptchaController {
@Autowired
private DefaultKaptcha defaultKaptcha;
@ApiOperation("验证码")
@GetMapping(value="/captcha",produces = "image/jpeg")
public void captcha(HttpServletRequest request,HttpServletResponse response){
//定义response输出类型为image/jpeg类型
response.setDateHeader("Expires", 0);
// Set standard HTTP/1.1 no-cache headers.
response.setHeader("Cache-Control", "no-store, no-cache, must revalidate");
// Set IE extended HTTP/1.1 no-cache headers (use addHeader).
response.addHeader("Cache-Control", "post-check=0, pre-check=0");
// Set standard HTTP/1.0 no-cache header.
response.setHeader("Pragma", "no-cache");
// return a jpeg
response.setContentType("image/jpeg");
//---------生成验证码----------
//获取验证码文本内容,并将其放入session中进行传输
String text = defaultKaptcha.createText();
System.out.println("验证码的内容是:"+text);
request.getSession().setAttribute("captcha",text);
//根据验证码文本内容创建图片
BufferedImage bimg = defaultKaptcha.createImage(text);
ServletOutputStream out = null;
try {
out = response.getOutputStream();
ImageIO.write(bimg,"jpg",out);
out.flush();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(null!=out){
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
data = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
二、在Swagger中进行测试
发送验证码请求后:
我们可以看见已经生成了验证码,且为
4pgc
我们在登录中进行测试
首先输入错误的验证码:
测试成功
再输入正确的验证码
测试成功
以上是关于kaptcha图片验证码的主要内容,如果未能解决你的问题,请参考以下文章