Day14-Servlet后端验证码的实现

news2024/9/21 5:46:27

图片验证码的生成采用的是Kaptcha

Kaptcha是一个高度可配置的验证码生成工具,由Google开源。它通过一系列配置文件和插件,实现了将验证码字符串自动转换成图片流,并可以与session进行关联,从而在验证过程中使用;

具体实现步骤如下:

第一步:添加依赖

        <dependency>
            <groupId>com.github.penggle</groupId>
            <artifactId>kaptcha</artifactId>
            <version>2.3.2</version>
        </dependency>

 第二步:配置验证码工具类

@WebServlet("/KaptchaCode")
public class Kaptcha extends HttpServlet {
    private Producer producer;

    @Override
    public void init() {
        Properties properties = new Properties();
        //设置图片边框
        properties.setProperty("kaptcha.border", "yes");
        //设置图片边框为蓝色
        properties.setProperty("kaptcha.border.color", "blue");
        //背景颜色渐变开始
        properties.put("kaptcha.background.clear.from", "127,255,212");
        //背景颜色渐变结束
        properties.put("kaptcha.background.clear.to", "240,255,255");
        // 字体颜色
        properties.put("kaptcha.textproducer.font.color", "black");
        // 文字间隔
        properties.put("kaptcha.textproducer.char.space", "10");
        //如果需要去掉干扰线
        properties.put("kaptcha.noise.impl", "com.google.code.kaptcha.impl.NoNoise");
        // 字体
        properties.put("kaptcha.textproducer.font.names", "Arial,Courier,cmr10,宋体,楷体,微软雅黑");
        // 图片宽度
        properties.setProperty("kaptcha.image.width", "200");
        // 图片高度
        properties.setProperty("kaptcha.image.height", "50");
        // 从哪些字符中产生
        properties.setProperty("kaptcha.textproducer.char.string", "0123456789abcdefghijklmnopqrsduvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
        // 字符个数
        properties.setProperty("kaptcha.textproducer.char.length", "4");
        Config config = new Config(properties);
        producer = config.getProducerImpl();
    }
//这里要注意了这个验证码生成只支持get方法
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 生成一个文本验证码
        String code = producer.createText();
        // 根据验证码文本生成一张图片
        BufferedImage image = producer.createImage(code);
        // 设置响应的内容类型为图片格式
        resp.setContentType("image/jpeg");
        // 将图片写入到响应的输出流中,以jpg格式保存
        ImageIO.write(image, "jpg", resp.getOutputStream());
        //session是给登录验证的逻辑代码传参的
        HttpSession session = req.getSession();
        session.setAttribute("code", code);
    }
}

第三步:前端/后端渲染代码引入 

<%--
  Created by IntelliJ IDEA.
  User: 21222
  Date: 2024/7/29
  Time: 上午10:35
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>学生信息管理系统登录页</title>
<%--   这里的样式代码放在文章末尾了太占位置了--%>
</head>
<body>
<div class="box">
    <h1>学生信息管理系统登录页</h1>
    <form action="/javaweb/Login" method="post">
        <div class="form-group">
            <label for="user">账号</label>
            <input type="text" id="user" name="user" placeholder="请输入账号">
        </div>

        <div class="form-group">
            <label for="pw">密码</label>
            <input type="text" id="pw" name="pw" placeholder="请输入密码">
        </div>

        <div class="captcha-container">
            <div class="form-group">
                <label for="yzm">验证码</label>
                <input type="text" id="yzm" name="yzm" placeholder="请输入验证码">
            </div>
<%--            验证码的引入--%>
            <img src="/javaweb/KaptchaCode" alt="验证码" width="120" onclick="this.src=this.src+'?'+Math.random()">
        </div>

        <button type="submit">登录</button>
    </form>
</div>
</body>
</html>

css样式代码 

<style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f7f7f7;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
        }

        .box {
            width: 360px;
            background-color: #fff;
            border-radius: 10px;
            padding: 30px;
            box-shadow: 0 6px 12px rgba(0, 0, 0, 0.15);
            display: flex;
            flex-direction: column;
            align-items: center;
        }

        h1 {
            font-size: 26px;
            margin-bottom: 20px;
            color: #333;
            text-align: center;
        }

        form {
            width: 100%;
        }

        .form-group {
            margin-bottom: 20px;
            display: flex;
            flex-direction: column;
        }

        .form-group label {
            margin-bottom: 5px;
            font-size: 14px;
            color: #555;
        }

        .form-group input[type="text"] {
            padding: 10px;
            border: 1px solid #ddd;
            border-radius: 5px;
            box-sizing: border-box;
            width: 100%;
        }

        .form-group input[type="text"]:focus {
            border-color: #4CAF50;
            outline: none;
        }

        .captcha-container {
            display: flex;
            align-items: center;
            margin-bottom: 20px;
        }

        .captcha-container img {
            margin-left: 10px;
            cursor: pointer;
            border-radius: 5px;
            box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
        }

        button {
            background-color: #4CAF50;
            color: white;
            padding: 12px 20px;
            border: none;
            border-radius: 5px;
            cursor: pointer;
            font-size: 16px;
            transition: background-color 0.3s ease;
            width: 100%;
        }

        button:hover {
            background-color: #45a049;
        }
    </style>

 

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

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

相关文章

如何快速进行视频截屏?5个软件帮助你快速截屏

如何快速进行视频截屏&#xff1f;5个软件帮助你快速截屏 截取视频屏幕是一项常见的任务&#xff0c;无论是为了制作教学视频、分享有趣的片段&#xff0c;还是保存重要的画面。以下是五款好用的软件&#xff0c;能够帮助你快速进行视频截屏。 迅捷视频转换器 这款软件不单…

EF8 code first 模式下去除自动生成表加s(复数形式)全网第一帖

前言: 今天下午一直在纠结这个问题&#xff0c;EF如果采用code first模式&#xff0c;进行迁移&#xff0c;他会表名自动给你加上s形成复数形式&#xff0c;搜了很久找到的觉方案有两种&#xff0c;其中实体类指定表名的方法是可行的&#xff0c;另外一种都是说 modelBuilder.…

昇思25天学习打卡营第XX天|LSTM+CRF序列标注

条件随机场&#xff08;CRF&#xff09;是一种用于序列预测的概率图模型&#xff0c;它考虑了序列中元素之间的相互依赖关系。与简单的多分类问题不同&#xff0c;CRF能够捕捉序列中标签的连贯性&#xff0c;如在命名实体识别中&#xff0c;一个词的标签往往依赖于它前面词的标…

【JDK11和JDK8并行与切换】

一、JDK11安装 1、下载jdk11&#xff0c;点击.exe安装在&#xff1a;C:\Program Files\Java\jdk-11\ 2、配置JAVA_HOME 变量名为JAVA_HOME 变量值为jdk安装路径 3、配置PATH 找到系统变量里的PATH 双击或者单击后点击编辑 点击右上角的新建 新建两条 %JAVA_HOME%\bin …

详细介绍Linux iftop 的结果如何查看

目录 1. 安装 iftop 2. 运行 iftop 3. iftop 界面详解 3.1 标题栏 3.2 流量显示区域 3.3 汇总信息 3.4 底部栏 4. 常用选项和快捷键 4.1 常用选项 4.2 常用快捷键 5. 实际案例 6. 真实排查网络【下行带宽过高】问题案例 6.1 【定义出口ip和端口】iftop -P 在流出服…

漏洞打靶AI-web1.0

下载安装靶机后要进行靶机ip的确定&#xff0c;具体步骤可以查看我的上一篇博客&#xff0c;这里就不细说了。 在物理机访问靶机IP地址进入这样一个页面&#xff0c;我们发现这里没有输入框也没有点击按钮&#xff0c;导致我们无处下手&#xff0c;不过我们还可以用工具去扫描…

无人机之社区管理篇

在社区管理中&#xff0c;无人机的应用更是为传统的管理方式带来了革新与便利。 一、安全监控与巡逻 无人机可以配备高清摄像头和红外传感器&#xff0c;进行24小时不间断的监控和巡逻。在社区中&#xff0c;无人机可以用于检测公共区域的安全状况&#xff0c;及时发现异常情况…

【C语言】处理文件错误:详解 strerror, perror, 和 fopen

&#x1f984;个人主页:小米里的大麦-CSDN博客 &#x1f38f;所属专栏:https://blog.csdn.net/huangcancan666/category_12718530.html ⚙️操作环境:Visual Studio 2022 目录 一、引言 二、fopen 函数 解释&#xff1a; 1. 函数原型 2. 参数 3. 代码示例 三、strerror …

形象设计大赛活动方案策划

一、活动流程 1、个人创意服装展示&#xff08;30分&#xff09;&#xff1a;选手自备服装&#xff0c;要能展示现代大学生青春、时尚&#xff0c;富有内涵的高雅气质和礼仪风范&#xff08;如:校园装、运动装、休闲装和职业装&#xff09;。 由评委评判出对选手的第一印象分。…

代码随想录二刷(哈希表)

代码随想录二刷(哈希表) 三数之和思路反正对于我来说是真的难想出来。 若这道题还是采用哈希表的思路去做&#xff0c;非常麻烦&#xff0c;并且还要考虑去重的操作。所以这道题其实用双指针&#xff0c;是更方便的。 具体程序如下&#xff1a; class Solution:def threeSu…

SPON IP网络对讲广播系统的命令执行漏洞复现实验

第一步&#xff1a;使用fofa搜索语句搜索 fofa地址&#xff1a;网络空间测绘&#xff0c;网络空间安全搜索引擎&#xff0c;网络空间搜索引擎&#xff0c;安全态势感知 - FOFA网络空间测绘系统 查询漏洞的语句icon_hash"-1830859634" 第二步&#xff1a;访问网址&…

LangChain大模型应用开发指南-传统编程范式思维的应用

LangChain大模型应用开发指南-传统编程范式思维的应用 上节课&#xff0c;我带领小伙伴们完成了baichuan2量化模型的OpenAI标准接口封装&#xff0c;并完成LangChain对大模型的调用与测试。 今天我们将正式开始LangChain大模型应用开发课程。 组件总览 上图为LangChain的组件与…

软件工程之应用数学

软件工程之应用数学 第 20 章&#xff1a;应用数学20.1 运筹方法20.1.1 网络计划技术20.1.2 线性规划20.1.3 决策论20.1.4 对策论 20.2 数学建模 第 20 章&#xff1a;应用数学 数学是一种严谨、缜密的科学&#xff0c;学习应用数学知识&#xff0c;可以培养系统架构设计师的抽…

机器学习三步走:手写BP神经网络(入门) --> 基于TensorFlow框架开发(开发) --> 基于预训练模型快速构建应用(应用)

目录 前言第一步&#xff1a;手写BP神经网络1 概念简介1.1 神经网络内的概念1.2 神经网络外的概念 2 类BPNetwork2.1 初始化2.2 激活函数2.2.1 Sigmod2.2.2 Linear2.2.3 Sigmod_derivative 2.3 损失函数2.4 前向传播2.5 后向传播2.6 训练模型2.7 预测2.8 绘制损失值变化曲线 **…

实验 19. 用户进程

已完成实验 已完成实验链接 简介 实验 19. 用户进程 总结 main函数创造了1个主线程&#xff0c;两个内核线程&#xff0c;两个用户进程。共5个PCB&#xff0c;进程PCB->pgdir为进程自己的页表首虚拟地址&#xff0c;线程为null。因此本次实验是五个进/线程在来回切换。他…

抖音素材网站有哪些?这几个高质量的抖音无水印素材网站分享

在抖音这个视觉与创意并重的平台上&#xff0c;选择合适的无水印视频素材是提升内容质量的关键。如果你正在寻找既能使你的视频内容更具吸引力&#xff0c;又能避免版权问题的优质素材&#xff0c;那么本文将为你详细介绍几个高质量的抖音无水印素材网站。从国内的蛙学网到国际…

双指针算法大总结!!看完这篇再也没有难的双指针题!!例题C++解法!

题源acwing、力扣 讲解双指针题目一&#xff1a;盛最多水的容器思路AC代码 题目二&#xff1a;查找总价格为目标值的两个商品思路AC代码 题目三&#xff1a;链表的中间节点思路AC代码 题目四&#xff1a;环形链表思路AC代码 题目五&#xff1a;反转字符串中的元音字符思路AC代码…

【Vulnhub靶场AI-WEB-1.0打靶教程】

第一步&#xff1a;查看虚拟机的ip 第二步&#xff1a;扫描ip下开放的80端口 第三步&#xff1a;扫描查到的ip地址下的目录 第四步&#xff1a;访问查到的目录 访问robot.txt 第五步:访问robot.txt显示出的目录 第六步&#xff1a;打开kali终端&#xff0c;使用sqlmap功能 sq…

【Vue3】标签的 ref 属性

【Vue3】标签的 ref 属性 背景简介开发环境开发步骤及源码 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日子。…

win10游戏出现错误代码0xc0000142是什么情况?几种方法修复错误代码0xc0000142

错误代码 "0xc0000142" 通常表示应用程序无法正确启动&#xff0c;这经常与系统文件损坏、兼容性问题或环境设置不当有关。下面列出了一些步骤&#xff0c;可能帮助你解决在Windows 10上运行游戏时遇到的0xc0000142错误。 快速修复错误代码0xc0000142问题 1. 以管理…