谷歌验证码kaptcha使用(包括前端获取解析)

news/2024/11/23 2:13:31/

1.后端

基于springboot开发。

包结构 

1.导入依赖

<!--kaptcha验证码生成器--><dependency><groupId>com.github.axet</groupId><artifactId>kaptcha</artifactId><version>0.0.9</version></dependency>

2.配置类

@Configuration
public class CaptchaConfig {@Beanpublic DefaultKaptcha defaultKaptcha(){// 验证码生成器DefaultKaptcha captcha = 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", "宋体,楷体,微软雅黑");//字体大小,默认40properties.setProperty("kaptcha.textproducer.font.size", "30");//验证码文本字符内容范围 默认为abced2345678gfynmnpwx// properties.setProperty("kaptcha.textproducer.char.string", "");//字符长度,默认为5properties.setProperty("kaptcha.textproducer.char.length", "4");//字符间距 默认为2properties.setProperty("kaptcha.textproducer.char.space", "4");//验证码图片宽度 默认为200properties.setProperty("kaptcha.image.width", "100");//验证码图片高度 默认为40properties.setProperty("kaptcha.image.height", "40");Config config = new Config(properties);captcha.setConfig(config);return captcha;}
}

3.controller

@RestController
public class CaptchaController {@Autowiredprivate DefaultKaptcha defaultKaptcha;@GetMapping(value = "/captcha",produces = "image/jpeg")public void getCaptcha(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 jpegresponse.setContentType("image/jpeg");//-------------------生成验证码 begin --------------------------//获取验证码文本内容String text = defaultKaptcha.createText();//将验证码文本内容放入sessionrequest.getSession().setAttribute("captcha",text);// 创建验证码图像BufferedImage image = defaultKaptcha.createImage(text);ServletOutputStream outputStream = null;try {outputStream = response.getOutputStream();//输出流输出图片,格式为jpgImageIO.write(image,"jpg",outputStream);outputStream.flush();} catch (IOException e) {e.printStackTrace();}finally {if (null!=outputStream){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}}}}

2.前端

基于 vue 和 axios,这里只展示请求部分,如何拿到后端验证码图片的src路径

axios请求api

// 获取验证码
export function getCaptcha(){return request({method:"get",url: "/captcha",responseType:"blob" // 指定响应类型为二进制数据})
}

 根据请求api发起请求拿数据

   import {getCaptcha} from "@/api/login.js"// 获取验证码getCaptcha(){getCaptcha().then((resp)=>{const imgData = resp.data; // 拿到图片的二进制数据const imgSrc = URL.createObjectURL(new Blob([imgData],{type:'image/png'})) // 将二进制转换成url路径this.captcha = imgSrc;   })},


http://www.ppmy.cn/news/773625.html

相关文章

图片文件加密解密工具类

存储身份证正反面&#xff0c;认证文件等用的工具类&#xff0c;存储在oss中是不可以直接查看的图片文件&#xff0c;需要经过解密才行 import javax.crypto.*; import javax.crypto.spec.SecretKeySpec; import java.io.*; import java.nio.file.Files; import java.nio.file.…

appium遇到的问题(android7.0找不到控件 无法点击控件)

环境&#xff1a; appium版本&#xff1a;appium 1.4.16.1 android版本&#xff1a;android7.1 问题&#xff1a;android7.0找不到控件无法点击控件 解决方法&#xff1a; 1.android7.0以上需要使用appium1.6.3的版本 2.设置caps时添加&#xff1a;automationName:uiautomator…

vivoy73s和iqooz1哪个好

Vivo y73s:&#xff1a;配备6.44英寸AMOLED材质屏幕&#xff0c;24001080分辨率&#xff0c;90.1%屏幕比例&#xff0c;1670万色&#xff0c;P3色域&#xff0c;支持hdr10。吗?机身尺寸为16174.047.73mm&#xff0c;重量约为171.3g。 vivo手机爆降600这活动太给力了 机会不容错…

手机进程设置多少个最好_vivo手机越用越卡?1键关闭这5个设置,手机再用3年!永不卡顿...

vivo手机越用越卡?这可能是最大错觉了!只要你关闭下面的这些设置,手机用到2035年!接下来就带大家一起看看吧! 1.账户清理 手机的缓存很多?这可能是10年前的事情了!现在手机里面其实都是数据内容!只要我们把无关的数据删除就可以啦,特别是一些不常用到的应用!当然类似…

Python核心技术总结

第一章 变量和数据类型 1.1 变量 变量命名规则 字母数字下划线组合&#xff0c;但不能数字开头变量名不能包含空格不能使用Python保留的特殊用途单词变量简短&#xff0c;知名见义慎用小写字母l和大写数字O,会被误认为数字1 和0Python中的变量一律使用小写&#xff0c;这与其…

vivoY77和荣耀X40i 哪个好

vivoY77是1499元起步&#xff0c;荣耀X40i是1599元&#xff0c;到了12256版本时&#xff0c;两款手机价格才算同步&#xff0c;时1999元&#xff0c;同样的价格对比更有有意思&#xff01; 性能上荣耀直接差一大截&#xff0c;荣耀X40i搭载天玑700处理器&#xff0c;台积电7nm…

聊聊一个程序员一生中可能会邂逅各种各样的算法

文章目录 一个程序员一生中可能会邂逅各种各样的算法,但总有那么几种,是作为一个程序员一定会遇见且大概率需要掌握的算法。今天就来聊聊这些十分重要的“必抓!”算法吧~*一、引言二、 常见算法介绍三、重点算法总结动态规划算法:用于解决最优化问题,如最短路径问题,最长…

Android 画面显示流程一

DRM,英文全称 Direct Rendering Manager, 即 直接渲染管理器。 DRM是linux内核的一个子系统,提供一组API,用户空间程序,可以通过它,发送画面数据到GPU或者专用图形处理硬件,也可以使用它执行诸如配置分辨率,刷新率之类的设置操作。原本是设计提供PC设备支持复杂的图形设。…