个人博客系统 -- 登录页面添加图片验证码

news2024/12/23 14:08:54

目录

1. 功能展示

2. 前段代码

3. 后端代码


1. 功能展示

在登录页面添加验证码登录

1. 检测到没有输入验证码或者输入的验证码错误时,进行弹窗提示.并且刷新当前验证码图片

2. 点击验证码进行刷新

 

2. 前段代码

1. 添加验证码标签,在密码的下面,在login.html进行修改

主要改动如下:

2. 在提交的函数中加入验证码的信息 

3. 构造Ajax请求的时候,将验证码也插入到后端,并且判断后端的返回值,当code为-1的时候,表示验证码输入错误. 

 完整的login.html 如下所示:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>登陆页面</title>
    <link rel="stylesheet" href="css/conmmon.css">
    <link rel="stylesheet" href="css/login.css">
    <!-- 引入jQuery -->
    <script src="js/jquery.min.js"></script>
</head>

<body>
    <!-- 导航栏 -->
    <div class="nav">
        <img src="img/logo2.jpg" alt="">
        <span class="title">我的博客系统</span>
        <!-- 用来占据中间位置 -->
        <span class="spacer"></span>
        <a href="blog_list.html">主页</a>
        <a href="blog_edit.html">写博客</a>
        <a href="reg.html">注册</a>
        <!-- <a href="#">注销</a> -->
    </div>
    <!-- 版心 -->
    <div class="login-container">
        <!-- 中间的登陆框 -->
        <div class="login-dialog">
            <h3>登&nbsp;&nbsp;录</h3>
            <div class="row">
                <span>用户名</span>
                <input type="text" id="username">
            </div>
            <div class="row">
                <span>密&nbsp;&nbsp;&nbsp;&nbsp;码</span>
                <input type="password" id="password">
            </div>
            <div class="row">
                <span>验证码</span>
                <input type="text" id="captcha">
              
            </div>
            <div class="row">
                <img id="captchaImg" src="/user/captcha" onclick="refresh()" alt="Captcha">
            </div>
            
            <div class="row">
                <button id="submit" onclick="mysub()">提交</button>
            </div>
        </div>
        
    </div>
    <script>
        function mysub(){
            // 1. 非空校验
            // 页面加载时生成验证码
            // 点击验证码图片时刷新验证码
            
            var username = jQuery("#username");
            var password = jQuery("#password");
            var captcha = jQuery("#captcha");
            if(username.val() == ""){
                alert("请输入用户名!");
                username.focus();
                return;
            }
            if(password.val() == ""){
                alert("请输入密码!");
                password.focus();
                return;
            }
            if(captcha.val() == ""){
                alert("请输入验证码!");
                captcha.focus();
                refresh();
                return;
            }
            // 2. 构造ajax请求
            jQuery.ajax({
                url:"/user/login",
                type:"post",
                data:{"username":username.val(),"password":password.val(),"captcha":captcha.val()},
                success: function(result){
                    if(result != null && result.code == 200 && result.data != null){
                        // 执行成功 
                        location.href="/myblog_list.html";
                    }
                    else if(result != null && result.code == -1){
                        // 验证码输入错误
                        alert("验证码输入错误,请重新输入!");
                        refresh();
                    }else{
                        alert("用户名或密码错误,请重新登录!");
                    }
                }
            })
        }

        
        function refresh() {
            document.getElementById("captchaImg").src = "/user/captcha?time=" + new Date().getTime();
        }
        
    </script>
</body>

</html>

3. 后端代码

 我们使用hutool框架进行实现后端验证码的构造

1. 在pom.xml引入hutool的环境依赖

<dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-all</artifactId>
			<version>5.1.0</version>
		</dependency>

2. 在Usercontroller.java 中进行添加代码

先实例化LineCaptcha对象,用来获取验证码,同时获取日志对象,在控制台打印验证码日志.

 在usercontroller中添加下述代码,用来产生随机数字验证码

/**
     * 生成验证码
     * @param response
     */
    @RequestMapping("/captcha")
    public void captcha(HttpServletResponse response) {
        // 随机生成 4 位验证码
        RandomGenerator randomGenerator = new RandomGenerator("0123456789", 4);
        // 定义图片的显示大小
        lineCaptcha = CaptchaUtil.createLineCaptcha(100, 30);
        response.setContentType("image/jpeg");
        response.setHeader("Pragma", "No-cache");
        try {
            // 调用父类的 setGenerator() 方法,设置验证码的类型
            lineCaptcha.setGenerator(randomGenerator);
            // 输出到页面
            lineCaptcha.write(response.getOutputStream());
            // 打印日志
            logger.info("生成的验证码:{}", lineCaptcha.getCode());
            // 关闭流
            response.getOutputStream().close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

3. 登录中添加验证码的验证 

 

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

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

相关文章

多模态预训练 + 自监督学习 + 下游任务介绍

预训练 1&#xff09;特征提取要解决的问题是怎么分别量化文字和图像&#xff0c;进而送到模型学习? 特征抽取&#xff1a; 文本&#xff1a;倾向于bert等大模型 图像&#xff1a;神经网络&#xff0c;VIT等 2&#xff09;特征融合要解决的问题是怎么让文字和图像的表征交…

基于Java+SpringBoot+vue前后端分离社区医院信息平台设计实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

Hadoop_HDFS_常见的文件组织格式与压缩格式

参考资料 1. HDFS中的常用压缩算法及区别_大数据_王知无_InfoQ写作社区 2. 本文主要介绍下HDFS上的常见文件格式和压缩格式 总结 : HDFS 中常见的文件存储格式 textfile &#xff1a;行式存储格式sequencefile &#xff1a;行式存储格式orc &#xff1a;列式存储格式, 支…

Deployment 升级应用2

上次我们说到自己手动的做使用 RS 的方式来升级 pod &#xff0c;感觉还是蛮复杂的&#xff0c;并且容易弄错&#xff0c;实际生产过程中&#xff0c;肯定不会这样来弄&#xff0c;很危险 那么今天我们来分享 Deployment 的方式来显示的升级应用吧 Deployment 的方式升级应用…

3dmax崩溃后如何恢复文件?

当意外或突然关闭 3ds Max 场景时&#xff0c;有时会出现恢复 3ds Max 场景的问题。在处理任何项目的过程中&#xff0c;有时需要恢复 3ds Max 场景&#xff0c;为此在专用文件夹中创建备份副本。如果您使用的是 Windows 操作系统并且未更改项目位置或不知道项目位置&#xff0…

如何通过nginx代理实现外网访问内网mysql或oracle数据库

项目开发部署中经常会遇到MySQL或Oracle数据库安装在内网&#xff0c;而我们的应用服务只能部署在外网&#xff0c;如果实现外网服务访问连接内网的数据库呢&#xff1f;本次介绍如何通过Nginx配置实现外网访问内网数据库。 1、前置机服务器 首先要保证有一台前置机服务器既可…

为Android构建现代应用——主体结构

创建Screents和ViewModels 在前面的章节中&#xff0c;我们已经分析了OrderNow项目的理论概念和我们将赋予的组织。 在本章中&#xff0c;我们将开始实现初始结构和模板&#xff0c;这将联接每一个应用程序的部分。 首先将添加以下带有各自视图模型的主屏幕&#xff1a; •…

到底什么是前后端分离

目录 Web 应用的开发主要有两种模式&#xff1a; 前后端不分离 前后端分离 总结 Web 应用的开发主要有两种模式&#xff1a; 前后端不分离 前后端分离 理解它们的区别有助于我们进行对应产品的测试工作。 前后端不分离 在早期&#xff0c;Web 应用开发主要采用前后端不…

“云上新气象”,VDI+IDV混合部署,麒麟信安云正式上线某市气象局!

阴晴冷暖&#xff0c;风云变幻&#xff0c;气象与人们的生活密切相关&#xff0c;气象局信息系统的智慧高效运营对于提升灾害防御能力、城市气象观测等方面具有重要作用&#xff0c;随着气象业务范围的不断扩展&#xff0c;气象局的信息化建设与数字化转型也亟需提上日程。 走…

【Solr】Solr搜索引擎使用

文章目录 一、什么是Solr?二 、数据库本身就支持搜索啊,干嘛还要搞个什么solr?三、如果我们想要使用solr那么首先我们得安装它 一、什么是Solr? 其实我们大多数人都使用过Solr,也许你不会相信我说的这句话,但是事实却是如此啊 ! 每当你想买自己喜欢的东东时,你可能会打开某…

Python入门准备

安装并配置Python 1、想要更新终端里Python的版本&#xff1a; 在python.org官网上下载最新版&#xff0c;下载安装以后&#xff0c;在终端输入python3进行询问。 2、完成Python环境的安装(Linux:操作系统&#xff0c;基于Cent0S7&#xff09; 在Linux系统上安装Python需要…

中小学分班查询系统如何制作?这个方法3分钟轻松搞定

暑假一过完&#xff0c;新学年即将开始&#xff0c;学校面临着一个重要的任务&#xff1a;学生分班。无论是新生入学还是低年级升高年级&#xff0c;都需要进行分班工作。这对负责分班的老师们来说&#xff0c;增加了相当大的工作量和挑战。 在开学前&#xff0c;如何快速搞定…

Pure Admin 图标篇

1. 官方图标讲解地址 B站搜索&#xff1a;vue-pre-admin之图标篇&#xff0c;作者“乐于分享的程序员小铭” 2. 实操 1. iconify官网 Icon Sets • Iconify 2. 在build->optimize.ts 中&#xff0c;配置所用的Iconify icon包 如&#xff1a; "iconify-icons/ep&quo…

LNK 2001 问题的一种解决办法

问题&#xff1a; 可能有这样的报错&#xff0c;error LNK 2001: 无法解析的外部符号" protected: virtual void __thiscall testing::Test::SetUp(void)"。 解决办法&#xff1a; 换了各编译器就好了&#xff0c;从第二个换到了第一个。 猜测&#xff1a;这里是因…

开江县“五社联动 关爱一老一小“主题活动之银龄爱齿健康关爱计划

为进一步宣传和推动“五社联动”关爱“一老一小”的社工服务理念&#xff0c;近日&#xff0c;开江县网格员社会工作服务中心携手彭州市葡萄树社会工作服务中心链接爱心单位&#xff08;夜郎古酒&#xff09;捐赠的1440支牙膏&#xff08;合和泰品牌牙膏&#xff09;&#xff0…

Electron从构建到打包程exe应用

Electron从构建到打包程exe应用 Electron文档搭建网页装载到 BrowserWindow中定义全局对象进程之间通信打包应用程序对代码进行签名 Electron文档 搭建 创建一个文件夹&#xff0c;在根目录执行以下几个命令 1.npm init 2.npm install electron --save-dev 3.根目录新增main…

route_group时调整routing rule via array大小

使用route_group secondary pg pin时需要multi via/double via&#xff0c;可以使用如下办法。 用create_routing_rule -vias {{via_def_name array_size NR/R} {xx xx xx}} R和NR就是能不能旋转 set_routing_rule net_name -rule rule_name -max_routing_layers MEx -max_la…

RHCSA(一)

1、在VMware上创建虚拟机以及安装Linux操作系统&#xff0c;使用ssh进行远程连接 1.创建虚拟机 2.安装Linux系统 3.使用Xshell进行远程ssh连接终端 进入了Linux系统&#xff0c;打开终端输入ifconfig回车得到了虚拟网卡的IP地址为192.168. 163.128 打开Xshell远程连接软件…

Longhorn vs Rook vs OpenEBS vs Portworx vs IOMesh:细说 5 款 K8s 持久化存储产品优劣势

云原生时代下&#xff0c;越来越多的企业开始使用 Kubernetes&#xff08;K8s&#xff09;承载数据库、消息中间件等“生产级”有状态工作负载。由于这些应用对数据持久保存、性能、容量扩展和快速交付具有较高的要求&#xff0c;企业往往需要采用专为 Kubernetes 环境设计的持…

入侵检测——IDS概述、签名技术

1. 什么是IDS&#xff1f; IDS&#xff08;intrusion detection system&#xff09;入侵检测系统&#xff0c;是一种对网络传输进行即时监视&#xff0c;在发现可疑传输时发出警报或者采取主动反应措施的网络安全设备。它会对系统的运行状态进行监视&#xff0c;发现各种攻击企…