maven_SSM项目如何实现验证码功能

news2024/11/20 22:39:00

验证码的作用

防止恶意注册,自动化程序批量注册。防止暴力破解。

1、这里我们使用goole的验证码生成器

由于直接在maven中引入依赖,没有找到。所以只能直接去下载jar包了。

链接:https://pan.baidu.com/s/1KANhJKI4sQCfkiroTVr0WA?pwd=29iv 
提取码:29iv 
这里是我下载好的,kaptcha-2.3.2.jar
下载好之后,将它添加到本地仓库

mvn install:install-file -Dfile=${下载jar包路径} -DgroupId=com.google.code.kaptcha -DartifactId=kaptcha -Dversion=2.3.2 -Dpackaging=jar

参考:一个Maven实现的验证码模块_Zachary1994的博客-CSDN博客


添加到本地仓库后,我们就可以在pom.xml中引入依赖了:

 2、接下来就是配置了

applicationContext.xml

<!--Kaptcha 配置-->
    <bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha"> <!--定义bean-->
        <property name="config"> <!--设置bean属性config-->
            <bean class="com.google.code.kaptcha.util.Config"><!--定义Config的bean,它是kaptcha的配置类-->
                <constructor-arg>   <!--设置`Config`bean的构造参数-->
                    <props> <!--定义一个属性列表,包含多个属性键值对-->
                        <prop key="kaptcha.border">no</prop>    <!--设置验证码图片的边框是否显示-->
                        <prop key="kaptcha.image.width">200</prop><!--设置验证码图片的宽度-->
                        <prop key="kaptcha.image.height">50</prop><!--设置验证码图片的高度-->
                        <prop key="kaptcha.textproducer.char.string">abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890</prop><!--设置验证码字符的取值范围-->
                        <prop key="kaptcha.textproducer.char.length">4</prop><!--设置验证码的字符长度-->
                        <prop key="kaptcha.textproducer.font.size">40</prop><!--设置验证码文字的字体大小-->
                        <prop key="kaptcha.textproducer.font.color">black</prop><!--设置验证码文字的字体颜色-->
                        <prop key="kaptcha.textproducer.char.space">5</prop><!--设置验证码字符之间的间距-->
                        <prop key="kaptcha.noise.color">black</prop><!--设置验证码干扰线的颜色-->
                    </props>
                </constructor-arg>
            </bean>
        </property>
    </bean>

springmvc的基础配置,前端控制器等就不说了

然后写controller

@Controller
public class CaptchaController {
    @Autowired
    private Producer captchaProducer;
    @GetMapping("/captcha")
    public void getCaptcha(HttpServletRequest request, HttpServletResponse response) throws Exception {
        // 生成验证码文本
        String captchaText = captchaProducer.createText();

        // 将验证码文本存储在 Session中
        HttpSession session = request.getSession();
        session.setAttribute("captcha", captchaText);

        // 生成验证码图片
        BufferedImage captchaImage = captchaProducer.createImage(captchaText);

        // 将验证码图片输出到响应
        ServletOutputStream outputStream = response.getOutputStream();
        //该方法将验证码图像以JPG格式写入输出流
        ImageIO.write(captchaImage, "jpg", outputStream);
        outputStream.flush();
        outputStream.close();
    }

    @RequestMapping("/verification")
    @ResponseBody
    public String verification(String verification,HttpSession session){
        String captcha = (String) session.getAttribute("captcha");
//        System.out.println(captcha+"_"+verification);
        if(!verification.equals(captcha)){
            return "false";
        }else{
            return "true";
        }
    }
}

一个方法是生成验证码并相应到客户端,一个方法是后台验证(这里前端我是使用的ajax) 

前端

<div class="form-row">
        <input type="text" id="verification" name="verification" required><span class="verification-icon"></span>
        <img src="${pageContext.request.contextPath}/captcha" alt="验证码" id="ka"/><img src="${pageContext.request.contextPath}/status/images/reset.png" id="reset" alt="刷新" title="刷新"/>
</div>

 这里使用img标签的src属性直接请求controller将验证码显示。后面是一个刷新图片,要实现刷新验证码功能,这里使用JQuery为它绑定点击事件,通过更新src属性实现刷新

    // 获取刷新图片元素
    let resetImage = $("#reset");
    // 绑定点击事件
    resetImage.on("click", function() {
        refreshCaptcha();
    });
    // 刷新验证码函数
    function refreshCaptcha() {
        // 获取验证码图片元素
        let captchaImage = $("#ka");
        // 生成新的验证码URL
        let captchaUrl = contextPath + "/captcha?" + new Date().getTime();
        // 更新验证码图片的src属性
        captchaImage.attr("src", captchaUrl);
    }

至于验证码验证,我上面controller已经写好了验证方法,我是在验证码文本框失去焦点时使用ajax请求对验证码进行验证。这里可以通过自己的想法去调整更改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/562239.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Oracle数据库环境变量配置修改数据库密码

1.设置环境变量&#xff1a; 必须设置环境变量才可以用CMD命令访问Oracle数据库 1.1.首先找到你Oracle安装位置路径 C:\app\Administrator\product\11.2.0\dbhome_1 1.2.设置环境变量 1.2.1 设置Adimistrator变量 变量名&#xff1a; ORACLE_HOME 变量值&#xff1a;C:\app…

嵌入式学习之Linux驱动(第九期_设备模型_教程更新了)_基于RK3568

驱动视频全新升级&#xff0c;并持续更新~更全&#xff0c;思路更科学&#xff0c;入门更简单。 迅为基于iTOP-RK3568开发板进行讲解&#xff0c;本次更新内容为第九期&#xff0c;主要讲解设备模型&#xff0c;共计29讲。视频选集 0.课程规划 06:35 1.抛砖引玉-设备模型…

K8s in Action 阅读笔记——【3】Pods: running containers in Kubernetes

K8s in Action 阅读笔记——【3】Pods: running containers in Kubernetes 3.1 Introducing pods 在Kubernetes中&#xff0c;Pod是基本构建块之一&#xff0c;由容器集合组成。与独立部署容器不同&#xff0c;你总是要部署和操作一个Pod。Pod并不总是包含多个容器&#xff0…

Python数据分析案例28——西雅图交通事故预测(不平衡样本处理)

本次案例适合机器学习数据科学方向的同学。 引言(废话集) 交通事故是一个严重的公共安全问题&#xff0c;在全球范围内每年都有成千上万的人死于交通事故。随着交通运输的发展和城市化进程的加速&#xff0c;交通事故已成为制约城市发展和人民幸福的主要因素之一。因此&#x…

【蓝桥杯选拔赛真题57】Scratch计数游戏 少儿编程scratch图形化编程 蓝桥杯选拔赛真题讲解

目录 scratch计数游戏 一、题目要求 编程实现 二、案例分析 1、角色分析

Java版本企业电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展

营造全面规范安全的电子招投标环境&#xff0c;促进招投标市场健康可持续发展 传统采购模式面临的挑战 一、立项管理 1、招标立项申请 功能点&#xff1a;招标类项目立项申请入口&#xff0c;用户可以保存为草稿&#xff0c;提交。 2、非招标立项申请 功能点&#xff1a;非招标…

设计模式之【解释器模式】,用语言定义一门语言

文章目录 一、什么是解释器模式1、常见文法&#xff08;语法&#xff09;规则2、抽象语法树3、解释器模式的使用场景4、解释器模式的四大角色5、解释器模式优缺点 二、实例1、解释器模式的一般写法2、数学表达式案例 三、源码中的解释器模式1、Pattern正则2、Spring的Expressio…

jupyter notebook零散操作整理

1 修改Jupyter Notebook打开路径 1.1 永久修改 jupyter notebook --generate-config 打开相应的.py文件&#xff0c;修改c.NotebookApp.notebook_dir 1.2 临时修改 .切换到需要的临时目录&#xff0c;打开jupyter notebook 2 使用Matplotlib绘图时输出矢量图 %config Inli…

MT4期货软件怎么使用?有哪些MT4期货软件使用知识?

现在MT4软件在投资市场上应用广泛&#xff0c;当然也包括期货交易市场&#xff0c;但有不少投资者不知道为什么一定要选择MT4期货软件&#xff0c;其实选择MT4期货软件的理由有很多&#xff0c;MT4作为一款交易软件&#xff0c;不仅能够为投资者提供准确的市场信息&#xff0c;…

PyQt5实现父窗口内点击按钮显示子窗口(窗口嵌套功能)

摘要&#xff1a;在软件中&#xff0c;常会有点击某个按钮&#xff0c;显示一个新的子界面的需求&#xff0c;本文介绍如何在PyQt5中实现这一功能&#xff0c;主要涉及知识点是“信号与槽函数的自动绑定”。 程序说明&#xff1a; 1.开发环境&#xff1a;win10系统&#xff0c…

【C++】C++11线程库 和 C++IO流

春风若有怜花意&#xff0c;可否许我再少年。 文章目录 一、C11线程库1.thread类介绍2.mutex互斥锁 和 CAS原子操作&#xff08;compare and set&#xff09;3.lock_guard和unique_lock4.两个线程交替打印&#xff0c;一个打印奇数&#xff0c;一个打印偶数&#xff08;线程同步…

Java前缀和算法

一.什么是前缀和算法 通俗来讲&#xff0c;前缀和算法就是使用一个新数组来储存原数组中前n-1个元素的和&#xff08;如果新数组的当前元素的下标为n&#xff0c;计算当前元素的值为原数组中从0到n-1下标数组元素的和&#xff09;&#xff0c;可能这样讲起来有点抽象&#xff0…

题解 . 洛谷题单之动态规划的引入

前置知识&#xff1a; 数字三角形问题&#xff1a;动态规划之数字三角形模型_如何何何的博客-CSDN博客 01背包问题&#xff1a;动态规划之01背包模型_如何何何的博客-CSDN博客 完全背包问题&#xff1a;动态规划之完全背包模型_如何何何的博客-CSDN博客 多重背包问题&#…

两种蚁狮群优化(Ant Lion Optimizer, ALO)实现及仿真实验——附代码

目录 蚁狮群优化算法介绍&#xff1a; 总结概括&#xff1a; ALO算法设计&#xff1a; 1.觅食的蚂蚁随机行走 2.设置陷阱 3.设置陷阱诱捕蚂蚁 4.捕获猎物重建洞穴 多目标MOALO算法 两种蚁狮算法求解效果 (1) ALO (2) MOALO Matlab代码分享&#xff1a; 蚁狮群优化算…

CleanMyMac X4.13.5中文版Mac电脑优化软件

CleanMyMac X4.13.5是一款Mac电脑优化软件&#xff0c;旨在提高Mac电脑的性能、稳定性和安全性。它可扫描您的Mac电脑&#xff0c;并删除不需要的文件、清理缓存、卸载不必要的应用程序、优化启动项、检测并删除恶意软件等。此外&#xff0c;它还可以帮助您管理您的文件&#x…

Python库 pdf2docx 轻松将PDF转换成docx

前言&#xff1a; 可将 PDF 转换成 docx 文件的 Python 库。该项目通过 PyMuPDF 库提取 PDF 文件中的数据&#xff0c;然后采用 python-docx 库解析内容的布局、段落、图片、表格等&#xff0c;最后自动生成 docx 文件。 pdf2docx功能 解析和创建页面布局 页边距章节和分栏 (目…

腾讯云-服务违规封禁提醒解决

腾讯云-服务违规封禁提醒解决 背景解决方案Step1: 查看目标主机上有哪些TCP链接在使用22端口以及该进程的详细信息Step2&#xff1a;删除异常进程&#xff0c;及其可执行文件Step3&#xff1a;处理已经挂起的链接Step4&#xff1a;查看是否存在相关的定时任务Step5&#xff1a;…

vue - 大文件分片上传之simple-uploader.js的使用

vue - 大文件分片上传之simple-uploader.js的使用 分片上传的思路前端文件切片常见的写法后端常见的写法 关于大文件上传 关于单个文件上传&#xff1a;其实就是前端中的文件通过http传到后端&#xff0c;后端再写入服务器的过程 那单个大文件分片上传&#xff1a;其实就是前…

SpringBoot中操作Redis解析JsonArray数据为对象List(ruoyi字典值sys_dict为例)

场景 若依前后端分离版手把手教你本地搭建环境并运行项目&#xff1a; 若依前后端分离版手把手教你本地搭建环境并运行项目_前后端分离的项目怎么跑起来_霸道流氓气质的博客-CSDN博客 在上面搭建系统的基础上&#xff0c;会将系统的字典值缓存进redis中。 看数据格式存储的是…

大数据数据湖技术Hudi0.12.0版本源码编译

0 介绍 Apache Hudi&#xff08;Hadoop Upserts Delete and Incremental&#xff09;是下一代流数据湖平台。Apache Hudi将核心仓库和数据库功能直接引入数据湖。Hudi提供了表、事务、高效的upserts/delete、高级索引、流摄取服务、数据集群/压缩优化和并发&#xff0c;同时保…