阿里云网站建设教学视频教程,合肥庐阳区建设局网站,网站设计规划书怎么写,南昌建设人才网站目录一、前言1.Kaptcha 简介2.Kaptcha 详细配置表二、实现1.整合kaptcha#xff0c;创建kaptcha的工具类1.1 添加依赖1.2 创建KaptchaConfig工具类2 编写接口#xff0c;在接口中使用 kaptcha 工具类来生成验证码图片#xff08;验证码信息#xff09;并返回3 登录时从sess…
目录一、前言1.Kaptcha 简介2.Kaptcha 详细配置表二、实现1.整合kaptcha创建kaptcha的工具类1.1 添加依赖1.2 创建KaptchaConfig工具类2 编写接口在接口中使用 kaptcha 工具类来生成验证码图片验证码信息并返回3 登录时从session中获取验证码进行校验4.测试4.1 测试获取验证码图片的接口4.2 登录接口校验验证码三、完整代码一、前言
kaptcha 是一个很有用的验证码生成工具由于它有许多可配置项所以用它可以简单快捷的生成各式各样的验证码。
1.Kaptcha 简介
Kaptcha谷歌验证码 是一个可高度配置的实用验证码生成工具可自由配置的选项如
验证码的字体验证码字体的大小验证码字体的字体颜色验证码内容的范围(数字字母中文汉字)验证码图片的大小边框边框粗细边框颜色验证码的干扰线验证码的样式(鱼眼样式、3D、普通模糊、…)
2.Kaptcha 详细配置表 二、实现
实现思路 1.整合kaptcha创建kaptcha的工具类 2.编写接口在接口中使用 kaptcha 工具类来生成验证码图片验证码信息并返回 3.登录时从 session 中获取验证码进行校验 4.测试获取验证码图片验证码信息接口
1.整合kaptcha创建kaptcha的工具类
1.1 添加依赖
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId
/dependency
!--谷歌 验证码--
dependencygroupIdcom.github.penggle/groupIdartifactIdkaptcha/artifactIdversion2.3.2/version
/dependency1.2 创建KaptchaConfig工具类
package com.example.validationcodedemo.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;/*** 谷歌验证码配置文件* author qzz*/
Configuration
public class KaptchaConfig {Bean(name kaptchaProducer)public DefaultKaptcha getKaptchaBean(){DefaultKaptcha defaultKaptcha new DefaultKaptcha();Properties properties new Properties();//是否有边框 默认true 也可以自己设置yes,noproperties.setProperty(kaptcha.border, no);//验证码文本字符颜色 默认为Color.BLACKproperties.setProperty(kaptcha.textproducer.font.color, black);// 验证码图片宽度 默认为200properties.setProperty(kaptcha.image.width, 160);// 验证码图片高度 默认为50properties.setProperty(kaptcha.image.height, 60);// 验证码文本字符大小 默认为40properties.setProperty(kaptcha.textproducer.font.size, 38);//存储在session中值的keyproperties.setProperty(kaptcha.session.key, kaptchaCode);// 验证码文本字符长度 默认为5properties.setProperty(kaptcha.textproducer.char.length, 4);// 验证码文本字体样式 默认为new Font(Arial, 1, fontSize), new Font(Courier, 1, fontSize)properties.setProperty(kaptcha.textproducer.font.names, Arial,Courier);// 图片样式 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpyproperties.setProperty(kaptcha.obscurificator.impl, com.google.code.kaptcha.impl.ShadowGimpy);Config config new Config(properties);defaultKaptcha.setConfig(config);return defaultKaptcha;}Bean(name kaptchaProducerMath)public DefaultKaptcha getKaptchaBeanMath(){DefaultKaptcha defaultKaptcha new DefaultKaptcha();Properties properties new Properties();//是否有边框 默认true 也可以自己设置yes,noproperties.setProperty(kaptcha.border, yes);//边框颜色properties.setProperty(kaptcha.border.color, 105,179,90);//验证码文本字符颜色 默认为Color.BLACKproperties.setProperty(kaptcha.textproducer.font.color, black);// 验证码图片宽度 默认为200properties.setProperty(kaptcha.image.width, 160);// 验证码图片高度 默认为50properties.setProperty(kaptcha.image.height, 60);// 验证码文本字符大小 默认为40properties.setProperty(kaptcha.textproducer.font.size, 38);//存储在session中值的keyproperties.setProperty(kaptcha.session.key, kaptchaCodeMath);//验证码文本生成器properties.setProperty(kaptcha.textproducer.impl,com.tonglei.config.KaptchaTextCreator);// 验证码文本字符间距 默认为2properties.setProperty(kaptcha.textproducer.char.space, 3);// 验证码文本字符长度 默认为5properties.setProperty(kaptcha.textproducer.char.length, 4);// 验证码文本字体样式 默认为new Font(Arial, 1, fontSize), new Font(Courier, 1, fontSize)properties.setProperty(kaptcha.textproducer.font.names, Arial,Courier);// 图片样式 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpyproperties.setProperty(kaptcha.obscurificator.impl, com.google.code.kaptcha.impl.ShadowGimpy);// 验证码噪点颜色 默认为Color.BLACKproperties.setProperty(kaptcha.noise.color, black);// 干扰实现类 DefaultNoise\NoNoiseproperties.setProperty(kaptcha.noise.impl, com.google.code.kaptcha.impl.DefaultNoise);Config config new Config(properties);defaultKaptcha.setConfig(config);return defaultKaptcha;}
}
2 编写接口在接口中使用 kaptcha 工具类来生成验证码图片验证码信息并返回
编写获取验证码图片或者验证码信息功能接口
package com.example.validationcodedemo.controller;import com.google.code.kaptcha.Producer;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
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;/*** 验证码* author qzz*/
RestController
public class ValidationCodeController {Autowiredprivate Producer kaptchaProducer;Autowiredprivate Producer kaptchaProducerMath;/*** 生成验证码图片* param request* param response*/RequestMapping(/createKaptchaCodeImg)public void createKaptchaCode(HttpServletRequest request, HttpServletResponse response) throws IOException {response.setHeader(Cache-Control,no-store);response.setContentType(image/jpeg);//文本验证码String text kaptchaProducer.createText();//图片验证码BufferedImage image kaptchaProducer.createImage(text);//保存验证码到sessionrequest.getSession().setAttribute(kaptchaCode,text);ServletOutputStream outputStream response.getOutputStream();//设置写出图片的格式ImageIO.write(image,jpg,outputStream);//关闭输出流IOUtils.closeQuietly(outputStream);}/*** 生成验证码图片有边框* param request* param response*/RequestMapping(/createKaptchaCodeImg2)public void createKaptchaCode2(HttpServletRequest request, HttpServletResponse response) throws IOException {response.setHeader(Cache-Control,no-store);response.setContentType(image/jpeg);//文本验证码String text kaptchaProducer.createText();//图片验证码BufferedImage image kaptchaProducerMath.createImage(text);//保存验证码到sessionrequest.getSession().setAttribute(kaptchaCodeMath,text);ServletOutputStream outputStream response.getOutputStream();//设置写出图片的格式ImageIO.write(image,jpg,outputStream);//关闭输出流IOUtils.closeQuietly(outputStream);}
3 登录时从session中获取验证码进行校验 /*** 用户登录 校验验证码*/PostMapping(/login)public Result login(RequestBody UserLoginRequestJson requestJson,HttpServletRequest request){Result result new Result();//从session中获取验证码String kaptchaCode String.valueOf(request.getSession().getAttribute(kaptchaCode));//用户输入和session获取的验证码进行验证if (!requestJson.getCode().equals(kaptchaCode)){//验证码验证失败return Result.fail(10910,验证码不正确请重新输入);}//登录流程...省略return Result.success();}注意从session中获取验证码时key值一定要和前面生成验证码时存储的key保持一致。
4.测试
4.1 测试获取验证码图片的接口 4.2 登录接口校验验证码
验证码输入错误
验证码输入正确
三、完整代码
可点击此处下载