springboot验证码生成以及验证功能举例详解-环球新要闻
目录
1.easy-captcha工具包2添加依赖3.验证码字符类型4.字体设置5验证码图片输出6.生成并显示验证码6.1后端6.2前端7 验证码的输入验证7.1后端7.2前端总结1.easy-captcha工具包
生成验证码的方式有许多种,这里选择的是easy-captcha工具包。
github开原地址为:easy-captcha工具包
(相关资料图)
其支持Java图形验证码,支持gif、中文、算术等类型,可用于Java Web、JavaSE等项目。
2添加依赖
首先需要将easy-captcha的依赖配置文件增加到pom.xml文件中。
开源项目中已经写好了导入依赖语句复制粘贴过去即可。
com.github.whvcse easy-captcha 1.6.2
3.验证码字符类型
使用方法:
//生成验证码对象 SpecCaptcha captcha = new SpecCaptcha(130, 48, 5); //设置验证码的字符类型 captcha.setCharType(Captcha.TYPE_ONLY_NUMBER);
4.字体设置
如果不想使用内置字体也可以使用系统字体。使用方法如下:
//生成验证码对象 SpecCaptcha captcha = new SpecCaptcha(130, 48, 5); // 设置内置字体 captcha.setFont(Captcha.FONT_1); // 设置系统字体 captcha.setFont(new Font("楷体", Font.PLAIN, 28));
5验证码图片输出
这里可以选择输出为文件流,这是比较常见的处理方式。当然,也有一些Web项目会使用base64编码的图片。这两种方式easy-captcha都支持。
base64编码的输出方法如下所示:
SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 5); specCaptcha.toBase64(); // 如果不想要base64的头部data:image/png;base64, specCaptcha.toBase64(""); // 加一个空的参数即可
输出到磁盘上的方法如下所示:
FileOutputStream outputStream = new FileOutputStream(new File("C:/captcha.png")) SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 5); specCaptcha.out(outputStream);
该段代码为生成一张图片并保存到磁盘目录中,这里可以使用easy-captcha工具自带的out()方法输出。而在开发Web项目时,则会使用Response对象的输出流进行验证码的输出。
6.生成并显示验证码
6.1后端
在controller包中新建KaptchaController类,就可以新建一个方法。在方法里使用GifCaptcha可以生成一个PNG类型的验证码对象,并以图片流的方式输出到前端以供显示,代码如下所示:
@Controller public class KaptchaController { @GetMapping("/kaptcha") public void defaultKaptcha(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception{ httpServletResponse.setHeader("Cache-Control","no-store"); httpServletResponse.setHeader("Pragma","no-cache"); httpServletResponse.setDateHeader("Expires",0); httpServletResponse.setContentType("image/gif"); //生成验证码对象,三个参数分别是宽、高、位数 SpecCaptcha captcha = new SpecCaptcha(130, 48, 5); //设置验证码的字符类型为数字和字母混合 captcha.setCharType(Captcha.TYPE_DEFAULT); // 设置内置字体 captcha.setCharType(Captcha.FONT_1); //验证码存入session httpServletRequest.getSession().setAttribute("verifyCode",captcha.text().toLowerCase()); //输出图片流 captcha.out(httpServletResponse.getOutputStream()); } }
这里在控制器中新增了defaultKaptcha()方法,该方法所拦截处理的路径为/kaptcha。在前端访问该路径后就可以接收一个图片流并显示在浏览器页面上。
6.2前端
在static目录中新建kaptcha.html页面,在该页面中显示验证码,代码如下所示:
验证码显示
首先访问后端验证码路径/kaptcha,由于验证码是图片形式,所以将其显示在img标签中。然后定义onclick方法,在点击该img标签时可以动态切换显示一个新的验证码。点击时访问的路径为’/kaptcha?d="+new Date()*1,即原来的验证码路径后面带上一个时间戳参数d。时间戳是会变化的,所以每次点击都会是一个与之前不同的请求。如果不这样处理的话,由于浏览器的缓存机制,在点击刷新验证码后可能不会重新发送请求,将导致在一段时间内一直显示同一张验证码图片。
在编码完成后,启动Spring Boot项目。在启动成功后打开浏览器并输入验证码显示的测试页面地址
http://localhost:8080/kaptcha
效果如下:
7 验证码的输入验证
一般的做法是在后端生成验证码后,首先对当前生成的验证码内容进行保存,可以选择保存在session对象中,或者保存在缓存中,或者保存在数据库中。然后,返回验证码图片并显示到前端页面。用户在识别验证码后,在页面对应的输入框中填写验证码并向后端发送请求,后端在接到请求后会对用户输入的验证码进行验证。如果用户输入的验证码与之前保存的验证码不相等的话,则返回“验证码错误”的提示消息且不会进行后续的流程,只有验证成功才会继续后续的流程。
7.1后端
在KaptchaController类中新增verify()方法,代码如下所示:
public String verify(@RequestParam("code") String code, HttpSession session){ if (!StringUtils.hasLength(code)){ return "验证码不能为空"; } String kaptchaCode = session.getAttribute("verifyCode")+""; if (!StringUtils.hasLength(kaptchaCode)||!code.toLowerCase().equals(kaptchaCode)){ return "验证码错误"; } return "验证成功"; }
该方法所拦截处理的路径为/verify,请求参数为code,即用户输入的验证码。在进行基本的非空验证后,与之前保存在session中的verifyCode值进行比较,如果两个字符串不相等则返回“验证码错误”的提示,二者相同则返回“验证码成功”的提示。
7.2前端
在static目录中新建verify.html,该页面会显示验证码,同时也包含供用户输入验证码的输入框和提交按钮,代码如下所示:
验证码测试
<script src="http://s3.pstatp.com/cdn/expire-1-M/jquery/3.3.1/jquery.min.js"></script> <script type="text/javascript"> $(function () { //验证按钮的点击事件 $("#verify").click(function () { var code = $("#code").val(); $.ajax({ type: "GET",//方法类型 url: "/verify?code="+code, success: function (result) { //将验证结果显示在p标签中 $("#verifyResult").html(result); }, error:function () { alert("请求失败"); }, }); }); }); </script>
用户识别显示在页面上的验证码后,就可以在input框中输入验证码并点击“验证”按钮。在JS代码中已经定义了“验证”按钮的点击事件,一旦点击,就会获取用户在输入框中输入的内容,并将其作为请求参数向后端发送请求,验证用户输入的验证码是否正确,后端在处理完成后会返回处理结果,拿到处理结果就显示在id为verifyResult的p标签中。
总结
到此这篇关于springboot验证码生成以及验证功能的文章就介绍到这了,更多相关springboot验证码生成及验证内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
关键词:
责任编辑:宋璟
-
springboot验证码生成以及验证功能举例详解-环球新要闻
-
lumia 1020_诺基亚lumia fx800_当前滚动
-
世界信息:调质和高频淬火的区别-调质和淬火的区别
-
滨海县气象台发布海区大风橙色预警【Ⅱ级/严重】_今日热搜
-
刑事肇事逃逸判多少年_环球今热点
-
拟标题
-
湖北麻城:监督前移 为重大项目建设拧紧“廉洁阀”
-
要相信光:宇树业界首款全向超广角4D激光雷达,1590元起
-
烧茄子_最正宗的做法 动态
-
3月70城房价出炉:64城新房价格环比上涨 武汉、昆明领涨
-
资讯:电脑能用u盘当系统盘吗-(电脑能用u盘当系统盘吗)
-
佳都科技(600728):4月14日北向资金增持131.33万股
-
东信和平(002017):4月14日北向资金减持5.74万股 天天滚动
-
中国农业以较低的碳强度支撑稳产保供和粮食安全
-
从毛泽东的远见到国家安全——全民国家安全教育日
-
骨伤病人吃什么食物有利恢复_骨伤病_环球看热讯
-
视焦点讯!克拉玛依市白碱滩区:政策流动宣传车传递“税惠好声音”
-
多肉植物怎么养植(多肉植物怎么养植方法) 报资讯
-
嘉鱼公安开展“4.15全民国家安全教育日”宣传活动 环球热文
-
保安亭被拆,“试胆石”被砸 最新
-
44只个股连续上涨5个交易日及以上
-
老公送老婆礼物祝福-视讯
-
Mysteel解读:建筑业复苏程度优于制造业,建材较板材好转空间偏大 天天观察
-
全球时讯:高情商夸男生的句子_夸男生的词语
-
港交所:沪深港通十分有效,8年来仅有4100亿元实际资金过境
-
【世界独家】视频 | 赏花踏青好时节,残疾人朋友也不落下,瞧他们边看边拍多开心!
-
古琴有五根弦后来加了两根代表啥 古琴有几根弦
-
花粉锁定!华为nova 11系列发布会直播平台汇总来了
-
坚定不移全面深化改革扩大高水平对外开放 在推进中国式现代化建设中走在前列|焦点报道
-
法国和西班牙对ChatGPT展开调查 环球观热点
-
罗源满盾村大力发展生态种养铺就致富新路
-
英足总就罗伯逊遭边裁肘击声明:我们不会采取进一步行动
-
黄连素的功效与作用禁忌 黄连素的功效与作用
-
世界百事通!尊老爱幼是中华民族的传统美德作文_尊老爱幼是中华民族的传统美德
-
每日精选:苹果智能戒指专利曝光,可利用手势完成VR场景中交互