Day14-Servlet后端验证码的实现

JavaWeb登录案例带验证码(mysql+servlet+jsp+idea) Java Web登录案例 Java Web课程应该是算学了一半了,今天做了一个登录的界面,还简单有一个验证码验证的实现。运用了许多前面的知识点,这里做一个简单的总结吧。以此记录学习内容。中间有些内容来源于itcast 案例分析 话不多说,先看一下这个超级简陋的登录界面(虽然写起来也不少代码) 登录成功: 实现的功能: ​ 简单的登录界面,通过用户输入用户名、密码和验证码。通过验证验证码是否正确以及用户名和密码是否在数据库中存在,判断登录成功与否。 无情分割,正文开始 第一步 不妨先实现一个测 阅读详情

图片验证码的生成采用的是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>

 

kaptcha验证码组件使用简介解析 主要介绍了kaptcha验证码组件使用简介解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 立即下载

相关推荐

基于的公司考勤系统(程序+开题报告)(开题报告+源码)

我们将研究和设计系统的架构和功能模块,包括员工信息管理模块、部门信息管理模块、考勤信息记录模块、工资信息计算模块、请假信息处理模块、奖惩信息管理模块、公告信息发布模块、上班打卡模块以及加班申请模块等。目的: 本项目旨在设计并实现一个基于的公司考勤系统,通过该系统,可以实现对员工、部门信息、考勤信息、工资信息、请假信息、奖惩信息、公告信息、上班打卡、加班申请等功能的统一管理。基于的公司考勤系统的设计与实现,旨在通过自动化技术提高考勤管理的效率和准确性,为企业管理提供有力的数据支持。最终成品以下面运行环境。

迟限程序设计 997

Kaptcha 图片验证码使用

Springboot 整合 Kaptcha 图片验证码使用

清茶的博客 898

【Stata双重差分模型】双重差分DID的具体操作步骤

本案例将详细阐述如何使用双重差分法进行实证分析,并展示具体的STATA操作代码。

a519573917的博客 2万+

验证码Kaptcha的使用

Kaptcha是一个非常实用的验证码生成工具,可以通过配置生成多样化的验证码。以图片的形式显示,从而无法进行复制粘贴。

不死鸟的传说 1万+

Windows事件ID 10010报错:DCOM注册超时与Game Bar修复指南

DCOM(分布式组件对象模型)是Windows中用于跨进程组件通信的核心机制,其注册超时问题常表现为事件ID 10010报错。当Game Bar的PresenceWriter组件因权限配置不当、组件损坏或开机资源竞争而无法在限定时间内向DCOM注册时,系统会记录该错误,并可能伴随DCOM服务主机CPU占用升高或游戏栏功能异常。理解DCOM激活原理与Network Service账户权限,有助于从权限修复、组件重注册及开机时序优化等层面系统排查。本文针对不同Windows版本,提供从静默处理到根治的完整方案,

weixin_33563728的博客 888

告别手动维护!教你用SAP BAPI批量更新生产订单BOM组件(CO02工单)

本文详细介绍了如何利用SAP BAPI实现生产订单BOM组件的批量更新,解决传统手工操作(如CO02工单)效率低下的问题。通过核心函数解析和批量处理框架设计,帮助用户大幅提升工作效率,降低错误率,适用于物料主数据变更、季节性配方调整等场景。

weixin_30844577的博客 561

你知道么?如何使用java生成图片验证码——补充KaptchaServlet验证码的使用

你知道么?如何使用java生成图片验证码——补充KaptchaServlet验证码的使用

单调枯燥的CC的博客 1634

解决vscode无法运行npm命令的问题(cmd可行)

Powershell以及vscode中npm命令使用不了

无痕坚守本心的博客 2749

java使用kaptcha 验证码组件

(1)kaptcha是一个验证码生成工具。你可以生成各种样式的验证码,因为它是可配置的。kaptcha工作的原理是调com.google.code.kaptcha.servlet.KaptchaServlet,生成一个图片。同时将生成的验证码字符串放到HttpSession中。 kaptcha可以方便的配置 : kaptcha.border  是否有边框  默认为true  我

代码如疯 3610

DC/DC开关电源学习笔记(十三)Buck-Boost升降压电路工作原理

Buck-Boost电路是一种能够实现输出电压高于或低于输入电压的DC-DC变换器,且输出电压极性与输入电压相反。它结合了Buck(降压)和Boost(升压)两种拓扑的特点,广泛应用于需要灵活电压调整的场合,如电池供电设备、LED驱动和工业控制系统。本文将从电路结构、工作原理、关键公式推导及实际应用等方面进行详细分析。

小幽余生不加糖 3503

audio语音相关的基础知识-VAD,ASR,AEC,AGC,BF等

有音素之间的间隙,也有静音和语音本身的间隙,为了对数据从时间上进行相对的校准,语音端点检测技术就应运而生了,因此端点检测技术可以决定这种校准的相对精度,使得同一内容的特征更趋于相同,当然,一般情况下是不可能完全相同的。盲源分离的目的是求得源信号的最佳估计,盲辨识的目的是求得传输通道的。这个技术的主要任务是从带有噪声的语音中准确的定位出语音的开始和结束点,因为语音中含有很长的静音,也就是把静音和实际语音分离开来,因为是语音数据的原始处理,所以VAD是语音信号处理过程的关键技术之一。呈现出与会者清晰的声音。

u013250861的博客 1034

Servlet-随机生成验证码(初级版本)

Servlet之 验证码(初级) 需求:     使用Servlet向页面响应验证码,并且点击验证码或者"看不清楚,换一张"可以刷新验证码 需求分析: Servlet中需要完成的需求: 验证码的本质:就是一张图片 使用Servlet向页面响应验证码和现实中使用画板绘画一样: 设置画布的尺寸:宽度(width),高度(height) 有了画...

weixin_30532837的博客 195

全网最详细的UAVCAN/DroneCAN链路开发(官方DroneCAN消息+自定义DroneCAN消息)附DroneCAN项目源码

全网最详细的UAVCAN/DroneCAN链路移植开发(官方DroneCAN消息+自定义DroneCAN消息)附工程移植源码

Bit_Dong的博客 3233

JavaWeb学习记录 Day2(Servlet入门)

Day 2 2019年7月14日。 这是我学习JavaWeb的第二天。 这一天,我学到了以下的知识。 Servlet创建 创建一个Servlet 在src目录下新建Servlet,如图所示: 导入Servlet需要的jar包(Alt + 回车键 到标红线的代码可以自动下载缺失的jar包),jar包如图所示: 新建Servlet之后,会出现一个新的java文件,代码如下所示: package...

赈川 383

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

java实现验证码

html文件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>验证码</title> <script> /* * 点击超链接或者图片换一张 * 1、绑定单击事件

weixin_45061802的博客 149

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

DAY14 Javaweb Servlet、Response、Request

Servlet是sun公司开发的一门技术,如果要开发sevlet程序(网页java),只需要1、实现这个接口就可以 2、把开发好的java类部署到web服务器中。把实现了Servlet接口的Java程序叫做Servlet 教训:pom.xml中的依赖从百度复制过来爆红,官网复制后可以使用 servlet-maping:*.abc,那么所有字母+abc都能进入 *(所有的文件),优先级最低。先执行有明确路径的maping映射 ...

qq_34968810的博客 162

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

day14javaweb三层开发实例

day14 案例:用户注册登录   要求:3层框架,使用验证码 1 功能分析  注册  登录 1.1 JSP页面  regist.jsp  注册表单:用户输入注册信息;  回显错误信息:当注册失败时,显示错误信息;  login.jsp  登录表单:用户输入登录信息;  回显错误便利店:当登录失败时,显示错误信息;  index.jsp  用户已登录:显示当前用户名,以及“退出...

abc1171655416的博客 173

JavaWeb学习笔记--day14--注册案例

day13复习

xz58000的博客 442

关于注册或登录时设置验证码的问题

关于设置验证码代码展示

qq_44733452的博客 840

HTTP案例学习:用户登录&验证码

本笔记包括两个案例,分别是用户登录、验证码。 案例:用户登录接着 《HTTP:超文本传输协议》 、 《HTTP请求信息数据 - Request》 的学习,现在记录一份案例学习。 用户需求 编写 login.html 登录页面,并且有 username & password 两个输入框 使用 Druid 数据库连接池技术,操作 MySQL,day14数据库中user表...

喜欢前端的后端 MelodyJerry 2492

Session_案例_验证码_hehe.employment.over.16.7

文章目录16.14 Session_案例_验证码16.14.1 案例需求16.14.2 需求分析16.14.3 代码示例 16.14 Session_案例_验证码 16.14.1 案例需求 1.访问带有验证码的登录页面login.jsp; 2.用户输入用户名,密码以及验证码。 如果用户名和密码输入有误,跳转登录页面,提示:用户名或密码错误; 如果验证码输入有误,跳转登录页面,提示:验证码错误; 如果全部输入正确,则跳转到主页success.jsp,显示:用户名,欢迎您。 16.14.2 需求分析

原来是个傻子,请坐 !!! 179

JavaWeb-Servlet,HTTP协议

ServletServlet基础Servlet体系架构urlpartten配置:HTTP Servlet基础 server applet:运行在服务器端的小程序,Servlet就是一个接口,定义了java类被游览器访问到(tomcat)的规则,自定义一个类,实现Servlet接口,复写方法 Servlet配置: <!--配置Servlet--> <servlet> <servlet-name>demo1</servlet-name&g

CptOctopus的博客 283

JavaWeb16.7【Cookie&Session:案例-登录验证码】

1 <%-- 2 Created by IntelliJ IDEA. 3 User: yubaby 4 Date: 2021/7/3 5 Time: 12:32 6 To change this template use File | Settings | File Templates. 7 --%> 8 <%@ page conte...

yubaby 309

超全面的JavaWeb笔记day14<用户注册登录>

案例:用户注册登录   要求:3层框架,使用验证码 1 功能分析 l 注册 l 登录   1.1 JSP页面 l regist.jsp Ø 注册表单:用户输入注册信息; Ø 回显错误信息:当注册失败时,显示错误信息; l login.jsp Ø 登录表单:用户输入登录信息; Ø 回显错误便利店:当登录失败时,显示错误信息; l inde

:)一位靓仔偶然路过的博客 1556

用jsp实现登录界面

一.用户登录案例需求: 1.编写login.jsp登录页面 username & password 两个输入框 2.使用Druid数据库连接池技术,操作mysql,day14数据库中user表 3.使用JdbcTemplate技术封装JDBC 4.登录成功跳转到SuccessServlet展示:登录成功!用户名,欢迎您 5.登录失败跳转到login.jsp展示:登录失败,用户名或密码错误,验证...

笼中鸟 2万+

day14(编码实战-用户登录注册)

day14 案例:用户注册登录   要求:3层框架,使用验证码 功能分析 注册 登录 1.1 JSP页面 regist.jsp 注册表单:用户输入注册信息; 回显错误信息:当注册失败时,显示错误信息; login.jsp 登录表单:用户输入登录信息; 回显错误便利店:当登录失败时,显示错误信息; index.jsp 用户已登录:显示当前用户名,以及"退...

weixin_30655219的博客 392
上一篇: Servlet中PrintWriter的write()、print()、println()方法的区别
下一篇: Day15--Servlet后端之Jsp了解学习(数据展示分页的实现)
IT ·南栀
博客等级 码龄6年 415粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT ·南栀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值