Java Web实践专题——图形验证码的生成与使用

创建Java图片验证码:原理与实践 验证码(CAPTCHA)用于区分人类用户与计算机程序,是最常见的网络安全措施之一。为了保证验证码的有效性,字符集的选择至关重要。常见的字符集包括数字、大小写字母以及一些特殊字符。例如,基本ASCII字符集和Unicode字符集。数字字符集:0-9共10个字符,简单易读,容易输入,但易受猜测攻击。大小写字母字符集:包括26个小写字母和26个大写字母,共52个字符,增加了复杂度。特殊字符集:一般包括标点符号、运算符、货币符号等,如等,这些字符增加了验证码的多样性。 阅读详情
 
图形验证码的主要目的是为了增强的安全性,增加用户通过遍历所有可能性来破解密码的难度。
图形验证码的使用包括如下3部分:
l         图形验证码的生成;
l         在页面中的使用;
l         验证;
1、图形验证码的生成
假设在Servlet生成图形验证码,在JavaBean或者JSP中生成的基本过程是相同的。设计如下过程:
l         设置响应的文档类型;
l         生成随机码;
l         把随机码保存到session中;
l         生成图片;
l         把随机码画到内存图片上;
l         把内存图片发送到客户端;
1.1 设置响应的文档类型
在对用户进行响应的时候,需要设置文档类型,要生成图片文档类型可以设置为:image/gif。
在Servlet中的设置方式为:response.setContentType("image/gif");
如果在JSP页面中使用则需要使用:<%@ page contentType="image/gif"%>
1.2 生成随机码
可以根据各种随机数生成策略来生成,并且可以设置随机码有哪些字符组成以及随机码的长度。
本文给出的随机码字符是所有字母和数字。使用的随机码生成策略使用的是Random对象提供的。参考代码如下:
随机码字符列表:
   public static final char[] code = {'a','b','c','d','e','f','g',
                                    'h','i','j','k','l','m','n',
                                    'o','p','q','r','s','t',
                                    'u','v','w','x','y','z',
                                    'A','B','C','D','E','F','G',
                                    'H','I','J','K','L','M','N',
                                    'O','P','Q','R','S','T',
                                    'U','V','W','X','Y','Z',
                                    '0','1','2','3','4',
                                    '5','6','7','8','9'};
生成随机码的代码:
     StringBuffer checkcode=new StringBuffer();
 
     // 每循环一次,生成一位
     for(int i=0;i<code_length;i++)
     {
        int generated=(new Random()).nextInt(62);
        checkcode.append(code[generated]);
     }
1.3 把随机码保存到session中
为了在用户提交验证码之后进行验证,需要保存生成的验证码,可以保存在session中。在Servlet中需要先获取session对象,然后再使用。
下面是参考代码:
     // 把生成的验证码保存到session中
     HttpSession   session=request.getSession(true);
     session.setAttribute("checkCode",checkcode.toString());
1.4 生成图片
使用BufferedImage类创建对象,然后使用画图对象画图。下面是参考代码:
     // 创建内存图片,参数为图片的大小以及类型
     BufferedImage   image
= new   BufferedImage(49,14,BufferedImage.TYPE_INT_RGB);
     // 得到Graphics句柄
     Graphics   g = image.getGraphics();
     // 设置画笔颜色
     // g.setColor(Color.yellow);
     // 画背景
     g.fillRect(0,1,49,12);
1.5 把随机码显示在图片上
参考下面的代码:
     // 设置字体色
     g.setColor(Color.black);
     // 画验证码
     g.drawString(checkcode.toString(),4,11);
 
     // 图象生效
     g.dispose();
1.6 把生成的图片发送到客户端
参考代码如下:
     ImageIO.write(image, "JPEG", response.getOutputStream());
这样就完成了动态图形验证码的生成。
2、在页面中使用图形码:
与使用其它图形的方式相同,使用<img src=”…”>标签。假设生成图片的Servlet的url-pattern值为checkcode,则在页面中加载图片的代码如下:
<img border=0 src="checkcode">
3、验证
获取用户输入的验证码,然后从session中获取保存的验证码,对比来确定是否相同,从而完成验证。
 
UE5.3像素流送Docker化部署:从Linux服务器搭建到云端实时渲染 本文详细介绍了在Linux服务器上使用Docker容器化部署UE5.3像素流送服务的完整流程。通过将虚幻引擎运行时、信令服务器和TURN服务打包为标准化镜像,利用Docker Compose进行编排,实现了云端实时渲染应用的快速部署、环境一致与弹性扩展,有效解决了传统部署中的环境依赖与运维难题。 阅读详情

相关推荐

Python广度优先搜索BFS - 蓝桥13届省赛污染海域

请问这片N * M海域中有几块是没被污染的独立海域(没被污染的独立海域是指该块海域上下左右被已污染的海域包围,且N * M以外的海域都为已被污染的海域)有一片海域划分为N * M个方格,其中有些海域已被污染(用0表示),有些海域没被污染(用1表示)。第二行开始输入N行,每行M个数字(数字只能为1或者0,1表示没被污染的海域,0表示已被污染的海域)这块4 * 5的海域,有3块海域(绿色)没被污染,因为每一块的上下左右都被污染的海域包围。输出一个整数,表示N * M的海域中有几块是没被污染的独立海域。

m0_69865359的博客 271

生成图片验证码时遇到的问题

Eclipse 警告提示:Access restriction:The type JPEGCodec is not accessible due to restriction on 两种解决方案: 1:Windows -> Preferences -> Java -> Compiler -> Errors/Warnings -> Deprecated and ...

shero1604的博客 947

Oracle 11g版本下载及安装超详细教程图解

新手Oracle安装教程

weixin_43738344的博客 10万+

图形滑动验证码JAVA实现【前后端结合】

一、为什么要验证码? 防暴力破解的课题一直是信息安全的重点,漏洞攻击更是开发者的噩梦。。。。 如果没有经历过这个噩梦,请感受一下被信安部门支配的恐惧。(一大堆漏洞给扫出来,您修代码吧) 二、怎么实现的? 前端:HTML+JS+CSS 开源组件:Layui 后端:Java 后端框架:SpringBoot 思路: 后端随机读取一张图片,利用算法随机“抠图”,返回base64码值到前端 前端读取到base...

J.R.Leonardo的博客 1万+

从零到一:手把手教你用YonBuilder for NCC搭建NC Cloud 2021.11开发环境(含避坑指南)

本文详细指导如何使用YonBuilder for NCC搭建NC Cloud 2021.11开发环境,涵盖硬件要求、软件安装、YonBuilder配置及常见故障排除。特别提供避坑指南,帮助开发者快速上手NCC开发,确保环境配置的原子化分解和开发思维的体系化建立。

weixin_42523326的博客 347

超十万字解读Spring AI实战:开篇

大模型技术正以惊人的速度改变世界,2025年的人工智能已不再是科幻,而是现实。大模型如ChatGPT等,正在重塑各行各业,降低技术门槛,使专业能力普及化。SpringAI的出现为Java开发者提供了桥梁,使其能在企业级系统中稳定运行AI,同时保持工程化思维。尽管SpringAI在生态、学习成本和性能上存在不足,但其企业级基因和国产化适配能力使其成为Java开发者的重要工具。本系列文章旨在介绍SpringAI的功能与特性,鼓励更多Java开发者参与AI实践,共同探索AI时代的无限可能。

liaokailin的专栏 1578

JAVA 用户登录图形验证码

摘要: 由于公司需要做一个监控系统,然后需要一个简单的登录页面,所以就需要一个简单的登录并需要验证,所以就在网上查了一下简单的验证码制作,废话不多说,代码如下: 1.pom引用 <dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artifactId> <version>2.3.2</version>

DreamWeaver_Zhou 1866

lammps多晶正弦粗糙界面建模

其中,30可以理解为正弦曲线的幅度,150为正弦曲线的基准坐标值,80控制周期,改变参数多试试就能找到规律。很久之前介绍过lammps粗糙界面建模,主要是在lammps中进行一维和二维的正弦粗糙面建模。运行完成后,会生成final.data,这个模型即为上表面为正弦波动的粗糙界面。新建1.py文件,粘贴下面内容后,运行:python 1.py。多晶需要在atomsk中进行,因此上述的方法就不再适用。最近有学员咨询多晶模型的正弦粗糙界面建模应该如何实现。在cmd窗口按顺序运行以下命令创建多晶模型。

lammps_jiayou的博客 390

Java怎么实现登录时的图片验证码功能,看过来

实现了一个图片验证码的功能,demo如图所示 怎么实现的呢? 需要写4个东西: 1.登录页面的jsp和js 2.验证码图片的实体类 3.生成验证码图片的servlet 4.处理登录请求的servlet 先看jsp代码: 一进入页面,就会生成一张验证码图片,因为写了 src="yanzheng"调用生成验证码图片的servlet; 然后点击图片会触发js方法,会重新调用生成验证码图片的servlet生成一张验证码图片; 点击登录,调用处理登录的servlet比较用户名密码和验证码.

Ace_2的博客 5539

嵌入式u-boot最全面试题及参考答案(5万字长文持续更新)

例如,在一个便携式设备中,U-Boot 在启动时初始化电源控制器,将输出电压设置为合适的值。命令是u-boot构建过程中用于配置u-boot选项的命令。在嵌入式系统中,启动画面(也称为启动Logo或Splash Screen)是展示给用户的第一印象,它可以包含公司的标志、产品的名称或其他相关信息。u-boot允许通过环境变量来进行配置,这使得开发者可以根据不同的硬件平台和项目需求灵活地调整u-boot的行为。写入操作可以是字节级别的,也可以是块级别的,具体取决于设备的性能和操作系统的需求。

大模型大数据攻城狮的专栏 1000

Windows Docker + RK3588 部署 YOLO26-Pose 人体姿态检测

YOLO26-Pose 在 RK3588 上的部署流程是 Windows Docker 容器内 ONNX 导出 → RKNN 转换(INT8 量化)→ ADB 推送 → 板端 C++ 推理。YOLO26n-Pose 在 640 输入下全链路约 55 FPS,可以覆盖实时姿态检测需求。先在板端用单张图片验证关键点输出正确性,确认 C++ 后处理的解析逻辑无误后,再切换到摄像头实时推理。

m0_64661770的博客 99

java图形验证码实现

java图形验证码实现

技术宅,专注云原生、Go、Linux、Java等技术分享,原创文章、效率工具、实战解决方案!关注我,了解互联网动态,学 IT 不迷路 1059

YOLO11改进|注意力机制篇|引入MLCA轻量级注意力机制

YOLO11中添加MLCA轻量级注意力机制

A1983Z的博客 4062

详解如何实现图形验证码

详细讲解图形验证码,包括线段干扰验证码,圆圈干扰验证码,扰乱干扰验证码,以及使用线段干扰验证码实现登录验证。

. 1万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java web--生成图形验证码

验证码就是在用户界面上以图形的方式显示的一些符号,通常有字母、汉字或数字组成的一个随机字符串。

qq_43238335的博客 784

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Java 图形验证码的生成和验证

1. 导入第三方包,主要用来生成图形验证码 <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>4.6.8</...

robinson_911的专栏 4141

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java图形验证码如何生成_Java 图形验证码的生成和验证

1. 导入第三方包,主要用来生成图形验证码cn.hutoolhutool-all4.6.82. 获取生成的图形验证码图片流,验证图片验证码package com.JXWorkApi.controller;import cn.hutool.captcha.CaptchaUtil;import cn.hutool.captcha.ShearCaptcha;import com.JXWork.resul...

weixin_30599809的博客 1149

Java图形验证码生成源码解析

本文详细分析了一个Java图形验证码的实现代码,包含ValidateCode和ImgFontByte两个类,展示了如何通过AWT生成带干扰线的随机字符验证码,并结合JSP页面实现前端展示与刷新功能,适用于Java Web项目中的登录安全防护。

weixin_36303305的博客 1298

Linux(CentOS)Java web项目中文图形验证码无法生成的问题

做项目的过程中遇到了验证码死活出不来的问题,浏览生成验证码的代码发现里面用到了“宋体”的字样,而CentOS默认是没有宋体的,安装字体后问题解决。写个小博客,给遇到相同问题的同学们提供一个思路。一般的验证码插件需要用到中文字体来绘制验证码,如下面的一个利用中文成语生成验证码的程序,代码片段“graphics2d.setFont(new Font("宋体", Font.BOLD, 18));”,而C...

javae100的博客 2864

Java实现多类型图形验证码生成

本文介绍了一个基于Java的图形验证码工具类,支持静态、动态和3D中空等多种样式。通过随机字体、颜色、干扰线及扭曲处理,有效防止OCR识别和机器人破解,适用于登录、领券等不同场景。

weixin_29215509的博客 1082

java 中生成图形验证码

  图片验证码的实现主要的技术点是如何生成一个图片。生成图片可以使用java.awt包下的类来实现。我们先写一个简单的生成图片的程序HelloImage.java。以下是代码部分。import java.awt.Color;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.Fi

hakunamatata2008的专栏 1254

java前后端分离怎么生成图形验证码

1.maven中引入commons-codec.jar <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.9</version> </depend...

qq_35137375的博客 2213

Java图形验证码生成工具

基于Java实现的图形验证码工具,支持随机字体、颜色、干扰线和扭曲效果,可生成静态或动态GIF验证码,有效防止OCR识别与机器人攻击。

weixin_42186015的博客 1653
上一篇: Java Web实践专题——MD5加密
下一篇: Java Web实践专题——图片管理
老李-大连
博客等级 码龄20年 3206粉丝 308原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值