宁波应用多的建站行业,phpcmsv9中英文网站,wordpress专题插件,南宁黄页电话号码查询hutool工具类实现验证码 一.生成验证码二.校验验证码三.使用案例1.引入hutool工具类2.VerifyCodeResp接口响应体3.VerifyCodeController验证码工具类4.测试验证5.项目结构及源码下载 利用hutool工具类#xff0c;可以很方便生成不同类型的验证码。这里简单记录下使用过程。 一… hutool工具类实现验证码 一.生成验证码二.校验验证码三.使用案例1.引入hutool工具类2.VerifyCodeResp接口响应体3.VerifyCodeController验证码工具类4.测试验证5.项目结构及源码下载 利用hutool工具类可以很方便生成不同类型的验证码。这里简单记录下使用过程。 一.生成验证码
提供接口将生成的验证码存入session或redis将验证码以图片格式或者base64编码串返回给调用端。
二.校验验证码
提供接口将收到调用端传过来的校验码从session或redis取出验证码两个验证码都全部转小写进行无大小写区分匹配校验返回true/flase 。
三.使用案例
1.引入hutool工具类 !-- hutool工具类 --dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.7.12/version/dependency2.VerifyCodeResp接口响应体
Data
public class VerifyCodeResp implements Serializable {/*** header头参数Captcha-Key*/private String captchaKey;/*** 验证码图片*/private String captchaImg;
}3.VerifyCodeController验证码工具类
/*** 验证码工具类*/
RestController
public class VerifyCodeController {ResourceRedisTemplateString, String redisTemplate;/*** 生成验证码** 方法一 ShearCaptcha* 图片格式* session存储* 接口需添加白名单放行** param request HttpServletRequest*/GetMapping(/verify)public void verify(HttpServletRequest request, HttpServletResponse response) throws IOException {response.setContentType(image/jpeg);response.setHeader(Pragma, no-cache);response.setHeader(Cache-Control, no-cache);response.setDateHeader(Expires, 0);//定义图形验证码的长、宽、验证码字符数、干扰线宽度ShearCaptcha shearCaptcha CaptchaUtil.createShearCaptcha(150, 40, 5, 4);//图形验证码写出可以写出到文件也可以写出到流shearCaptcha.write(response.getOutputStream());//获取验证码中的文字内容request.getSession().setAttribute(verifyCode, shearCaptcha.getCode());}/*** 生成验证码** 方法二 LineCaptcha* 图片格式* session存储* 接口需添加白名单放行** param request HttpServletRequest*/GetMapping(/verifyTwo)public void verifyTwo(HttpServletRequest request, HttpServletResponse response) throws IOException {response.setContentType(image/jpeg);response.setHeader(Pragma, no-cache);response.setHeader(Cache-Control, no-cache);response.setDateHeader(Expires, 0);//定义图形验证码的长、宽、验证码字符数、干扰线宽度LineCaptcha lineCaptcha CaptchaUtil.createLineCaptcha(150, 40, 5, 4);//图形验证码写出可以写出到文件也可以写出到流ImageIO.write(lineCaptcha.getImage(), JPEG, response.getOutputStream());//获取验证码中的文字内容request.getSession().setAttribute(verifyCode, lineCaptcha.getCode());}/*** 方法三 ShearCaptcha* 图片的base64编码字符串* session存储* 接口需添加白名单放行** param request HttpServletRequest* return String*/GetMapping(/getVerify)public String getVerify(HttpServletRequest request) {//定义图形验证码的长、宽、验证码字符数、干扰线宽度ShearCaptcha shearCaptcha CaptchaUtil.createShearCaptcha(150, 40, 5, 4);//获取验证码中的文字内容request.getSession().setAttribute(verifyCode, shearCaptcha.getCode());String base64String ;try {base64String data:image/png;base64, shearCaptcha.getImageBase64();} catch (Exception e) {e.printStackTrace();}return base64String;}/*** 方法四 LineCaptcha* 图片的base64编码字符串* session存储* 接口需添加白名单放行** param request HttpServletRequest* return String*/GetMapping(/getVerifyTwo)public String getVerifyTwo(HttpServletRequest request) {//定义图形验证码的长、宽、验证码字符数、干扰线宽度LineCaptcha lineCaptcha CaptchaUtil.createLineCaptcha(150, 40, 5, 4);//获取验证码中的文字内容request.getSession().setAttribute(verifyCode, lineCaptcha.getCode());String base64String ;try {//返回 base64ByteArrayOutputStream bos new ByteArrayOutputStream();ImageIO.write(lineCaptcha.getImage(), JPEG, bos);byte[] bytes bos.toByteArray();Base64.Encoder encoder Base64.getEncoder();base64String data:image/png;base64, encoder.encodeToString(bytes);} catch (Exception e) {e.printStackTrace();}return base64String;}/*** 方法五 ShearCaptcha* 图片的base64编码字符串* redis存储* 接口需添加白名单放行** return String*/GetMapping(/getVerifyThree)public VerifyCodeResp getVerifyThree() {String captchaKey UUID.randomUUID().toString();//定义图形验证码的长、宽、验证码字符数、干扰线宽度ShearCaptcha shearCaptcha CaptchaUtil.createShearCaptcha(150, 40, 5, 0);// 存入redis并设置过期时间为30分钟redisTemplate.opsForValue().set(captcha: captchaKey, shearCaptcha.getCode(), 30L, TimeUnit.MINUTES);String base64String ;try {base64String data:image/png;base64, shearCaptcha.getImageBase64();} catch (Exception e) {e.printStackTrace();}VerifyCodeResp verifyCodeResp new VerifyCodeResp();verifyCodeResp.setCaptchaKey(captchaKey);verifyCodeResp.setCaptchaImg(base64String);return verifyCodeResp;}/*** 方法六 LineCaptcha* 图片的base64编码字符串* redis存储* 接口需添加白名单放行** return String*/GetMapping(/getVerifyFour)public VerifyCodeResp getVerifyFour() {String captchaKey UUID.randomUUID().toString();//定义图形验证码的长、宽、验证码字符数、干扰线宽度LineCaptcha lineCaptcha CaptchaUtil.createLineCaptcha(150, 40, 5, 4);// 存入redis并设置过期时间为30分钟redisTemplate.opsForValue().set(captcha: captchaKey, lineCaptcha.getCode(), 30L, TimeUnit.MINUTES);String base64String ;try {//返回 base64ByteArrayOutputStream bos new ByteArrayOutputStream();ImageIO.write(lineCaptcha.getImage(), JPEG, bos);byte[] bytes bos.toByteArray();Base64.Encoder encoder Base64.getEncoder();base64String data:image/png;base64, encoder.encodeToString(bytes);} catch (Exception e) {e.printStackTrace();}VerifyCodeResp verifyCodeResp new VerifyCodeResp();verifyCodeResp.setCaptchaKey(captchaKey);verifyCodeResp.setCaptchaImg(base64String);return verifyCodeResp;}
}4.测试验证
如果测试验证码存入redis则需要提前配置和启动redis。
5.项目结构及源码下载 下载地址 springboot-cacheable 欢迎star哦~