Java验证码—ValidateCode的使用

ValidateCode实现验证码 验证码是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断地登录尝试。实际上用验证码是现在很多网站同行的方式。我们利用比较简单的方式实现这个功能。这个问题可以由计算机生成并评判。但是必须只有人类才能解答。由于计算机无法解答CAPTCHA问题,所以回答问题的用户就可以被认为是人类。 阅读详情
Java验证码—ValidateCode的使用

一、关于为何使用验证的解释

     在目前的网页的登录、注册中经常会见到各种验证码。其目的便是为了:防止暴力破解 .因为只要CPU性能较强,便可以在慢慢尝试密码的过程中来破解用户账号,因而导致的结果是用户信息不安全。


但是如果使用验证码,一旦用户输入的密码或账号不正确时,验证码也会立马改变,这样便在一定程度上实现了安全性。


二、利用Java代码来实现验证码功能

      为了避免上面原因造成的结果,Java中提供了相应的方法来实现验证功能。
1.创建一个servlet在其中写下面代码
(1)在doGet方法中
[java] view plain copy
  1. public void doGet(HttpServletRequest request, HttpServletResponse response)  
  2.             throws ServletException, IOException {  
  3.         test2(response);  
  4.           
  5.     }  
(2)单独提出来的test2方法中
[java] view plain copy
  1. private void test2(HttpServletResponse response) throws IOException{  
  2.         int width=110;  
  3.         int height=25;  
  4.         //1.在内存中创建一个图像对象  
  5.         BufferedImage img=new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);// 构造一个类型为预定义图像类型之一的 BufferedImage。  
  6.                                                                                         //表示一个具有 8 位 RGB 颜色分量的图像,对应于 Windows 或 Solaris 风格的 BGR 颜色模型,具有打包为整数像素的 Blue、Green 和 Red 三种颜色。                 
  7.         //2.创建一个画笔  
  8.         Graphics g=img.getGraphics();   
  9.           
  10.         //3给背景图片添加一个颜色  
  11.         g.setColor(Color.PINK);  
  12.         g.fillRect(1, 1, width-2, width-2);//建议使用IE浏览器访问,Google浏览器和获取均显示为居中的图片,ie显示左上角  
  13.           
  14.         //4.给边框一个色  
  15.         g.setColor(Color.RED);  
  16.         g.drawRect(0, 0, width-1, height-1);  
  17.           
  18.         //5.设置文本样式  
  19.         g.setColor(Color.BLUE);  
  20.         g.setFont(new Font("宋体",Font.BOLD|Font.ITALIC,15));//Font对象 ----根据指定名称、样式和磅值大小,创建一个新 Font。  
  21.           
  22.         //6.给图片添加文本  
  23.         Random rand=new Random();  
  24.         int position=20;  
  25.         for(int i=0;i<4;i++){  
  26.             g.drawString(rand.nextInt(10)+"", position, 20);//给图片填充文本  
  27.             position+=20;  
  28.         }  
  29.           
  30.         //7.将图片以对象流的方式输出到客户端  
  31.         ImageIO.write(img, "jpg", response.getOutputStream());  
  32.     }  

得到的结果是(在IE浏览器中的显示效果,如果在Google浏览器、火狐浏览器中将会显示在屏幕中间,且周围为黑色):


通常见到的验证码显示在登录、注册中。所以讲验证码内容放在html中

(3)在NewFile.html中
[html] view plain copy
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  2. <html>  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  5. <title>Insert title here</title>  
  6. <script type="text/javascript">  
  7.     //得到图片元素  
  8.     function changeCode(){  
  9.         var img = document.getElementsByTagName("img")[0];  
  10.         img.src = "/ee10_request_response/servlet/ServletDemo01";  
  11.     }  
  12. </script>  
  13. </head>  
  14. <body>  
  15.     <form action="#" method="post">  
  16.         用户名:<input type="text" name="username"/><br/>  
  17.         密码:<input type="password" name="psw"/><br/>  
  18.         验证码:<input type="text" name="code"/>  
  19.         <img src="/ee10_request_response/servlet/ServletDemo01" onclick="changeCode()"/><a href="javascript:changeCode()">看不清换一张</a><br/>  
  20.         <input type="submit" value="登录"/><br/>  
  21.     </form>  
  22. </body>  
  23. </html>  
得到的结果如下:

上面的验证码虽然得到了,但是点击更换验证码时,却没有立马更改,这是为什么呢?

三、浏览器缓存

1.问题提出
在上面的html中,由于点击“ 看不清换一张”或点击图片时,javascript的导向地址是同一个地址。浏览器将会认为是一样的,故不会进行刷新验证码。为了解决上面的问题,可以 在html中进行以下的更改



这种方法虽然实现了当点击更换验证码时,验证码得到了改变,但是也同时存在问题。那便是 当点击一次后,验证码更换,但再次点击时由于同样有缓存,所以验证码值改变一次


2.解决方案

由于时间总是改变的,并且永不相等。所以可以利用获取当前时间的方法来改变。利用Date().getTime()方法来获取当前时间


通过以上方法便可以成功解决存在的问题。

四、利用验证码工具ValidateCode来实现

由于Java提供了ValidateCode这个jar包,所以变不需要再进行人工编写代码来实现

(1)在servlet中写以下代码

[java] view plain copy
  1. public void doGet(HttpServletRequest request, HttpServletResponse response)  
  2.             throws ServletException, IOException {  
  3.         ValidateCode vc=new ValidateCode(110,25,4,9);  
  4.         String code=vc.getCode();  
  5.         vc.write(response.getOutputStream());  
  6.           
  7.     }  
得到的结果:

同样可以进行上面的验证改变,但是同样存在问题:浏览器会产生缓存,一旦刷新页面验证本来应该改变,但实际上并没有改变。


(2)解决方案

在servlet中写下以下代码:

[java] view plain copy
  1. public void doGet(HttpServletRequest request, HttpServletResponse response)  
  2.             throws ServletException, IOException {  
  3.         //告诉客户端不使用缓存  
  4.         response.setHeader("param", "no-cache");  
  5.         response.setHeader("cache-control", "no-cache");  
  6.         response.setIntHeader("expires", 0);  
  7.           
  8.         ValidateCode vc=new ValidateCode(110,25,4,9);  
  9.         String code=vc.getCode();  
  10.         vc.write(response.getOutputStream());  
  11.     }  


五、总结

以上便是我对于Java中验证码的使用以及ValidateCode工具使用的较浅认识。 一般情况下使用较多的是工具类,但是必须牢记浏览器缓存的因素。以上的总结如果存在错误,期望能及时提出,谢谢!




ValidateCode验证码的使用详解(初学看完都会用) ValidateCode验证码的使用详解: 第一步:ValidateCode.jar包下载。 第二步:导入jar包。 第三步:创建使用ValidateCode的Servlet。 第四步:编写HTML页面实现验证码及刷新功能。 第五步:编写接收HTML信息的Servlet实现验证 阅读详情

相关推荐

java springmvc实现验证码功能

主要为大家详细介绍了java springmvc实现验证码功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

用java来实现验证码功能(本帖为转载贴),作为个人学习收藏用

一、关于为何使用验证的解释 在目前的网页的登录、注册中经常会见到各种验证码。其目的便是为了:防止暴力破解 .因为只要CPU性能较强,便可以在慢慢尝试密码的过程中来破解用户账号,因而导致的结果是用户信息不安全。 但是如果使用验证码,一旦用户输入的密码或账号不正确时,验证码也会立马改变,这样便在一定程度上实现了安全性。 二、利用Java代码来实现验证码功能 ...

banjiang2431的博客 393

微信取证不求人:最新免费DAT解码工具使用指南(含闪退解决方案)

本文提供了一份详细的微信DAT文件免费解码工具使用指南。针对用户常见的图片无法查看问题,手把手教学如何安全获取并操作开源图形化工具,将加密的DAT文件一键还原为JPG/PNG图片。文章重点剖析了DAT文件的加密原理,并给出了详细的步骤解决工具运行中最常见的“程序闪退”等疑难杂症,帮助普通用户轻松完成微信取证。

m0n1o2p的博客 479

ValidateCode验证码的使用

ValidateCode验证码的使用 首先在项目lib文件下导入ValidateCode.jar 然后选择Add as Library 这样开发环境就有了 然后创建一个Servlet文件,与常用的servlet文件相同,继承 HttpServlet 导入 import cn.dsna.util.images.ValidateCode;//导入验证码包 然后就是在程序之中开始写验证码的使用了 protected void doPost(HttpServletRequest req, HttpServlet

m0_51207400的博客 2574

MATLAB机械臂建模实战:标准D-H法与改进D-H法到底选哪个?(附代码对比)

本文深入解析MATLAB中机械臂建模的标准D-H法与改进D-H法的本质区别,提供详细的代码对比和可视化结果。通过实际案例,帮助读者根据应用场景选择合适方法,并避免常见建模陷阱。特别关注Link函数和SerialLink工具的使用技巧,提升机械臂建模效率。

grape的博客 1121

RAD Studio 12安装全攻略:从下载到破解InterBase的完整流程(附KeyPatch使用技巧)

本文提供RAD Studio 12的完整安装指南,包括系统要求、安装步骤及InterBase数据库的高效配置方法。详细介绍了如何使用KeyPatch工具进行许可证处理,并分享了IDE优化和开发技巧,帮助开发者快速上手这一强大的跨平台开发工具。

q6r7s8t9的博客 950

Java验证码 ValidateCode.jar的使用(附下载链接)

ValidateCode.jar下载地址:点击下载 密码:aiyb 前端代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/...

半糖的博客 6040

实例讲解CANoe报文解析使用方法

在日常工作中,经常需要分析车辆产生故障的原因,在电动汽车中,分布式控制器及线束在其中某一个地方出现问题,就有可能造成车辆故障,但是由于电气零件无法直观的观察到哪个部位发生了故障,所以要借助工具测量电气变量或者采集报文信息通过分析,解析出故障原因,从而为车辆的开发,测试,维修提供支持。其中汽车行业最通用的通讯方式就是CAN通讯,本文针对使用CANoe对CAN报文离线分析的使用方法做详细介绍。

qq_43011586的博客 1万+

Java验证码jar包ValidateCode.jar的使用(附百度网盘下载)

Java验证码jar包ValidateCode.jar的使用(附百度网盘下载地址) 在项目中我们会经常用写图片验证码这个功能。但是自己去封装也挺繁琐的,这里提供给各位小伙伴一个很好用的生成图片验证码的jar包:ValidateCode.jar(文末有百度网盘的下载地址)。下面我们来看看这个jar包怎么用吧。 导入jar包。各位小伙伴可以根据自己项目的情况来,你可以选择用maven安装到你的本地仓库然后导入进来,我这里就不演示这个了。大家可以用maven命令:mvn install:install-file

daiyi666的博客 4867

SAP 基于生产订单行项目外部加工创建采购申请时的一个增强需求

摘要 本文介绍在SAP系统中实现生产订单外协工序自动生成采购申请(PR)时,将指定文本写入PR抬头文本的技术方案。关键点包括: 业务背景:通过CO02事务码将工序标记为外部加工,系统自动生成PR,需在生成时自动写入抬头文本。 技术难点: PR抬头文本存储在STXH/STXL而非EBAN表 标准增强点ME_PROCESS_REQ_CUST在外协场景可能不触发 推荐方案: 使用BAdI ME_REQ_POSTED,在PR过账时点执行 通过Text Object EBANH和Text ID(如B01)写入文本 实

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 623

Python 爬虫实战:爬取微博热搜与用户评论数据

本文系统讲解微博热搜榜单与用户评论数据的爬取技术方案。针对微博热搜榜采用Requests+BeautifulSoup解析静态HTML结构,实现高效爬取;对于动态加载的评论数据,使用Selenium模拟浏览器行为规避反爬机制。详细阐述技术选型、反爬策略、数据清洗及存储方法,提供完整代码实现和输出示例。同时强调合规要求,提示开发者需在遵守平台规则的前提下进行数据采集。该方案为舆情分析和热点研究提供了可落地的技术实现路径。

2503_91057718的博客 1716

Java中使用ValidateCode图片验证码

图片验证码的Maven依赖 <!-- 验证码 --> <dependency> <groupId>cn.dsna</groupId> <artifactId>ValidateCode</artifactId> <...

weixin_44412019的博客 3396

Python趣学篇:用Pygame打造绚烂流星雨动画

这是一个基于Pygame开发的流星雨动画项目,具有以下特效:🌠多彩流星:8种不同颜色的流星随机生成,每颗都有独特的轨迹✨粒子尾迹:每个流星都带有动态的粒子拖尾效果,增强视觉冲击力🌟闪烁星空:150颗背景星星营造真实的夜空氛围🌌渐变背景:深蓝到黑色的自然渐变,模拟夜空色彩💫斜向轨迹:所有流星都以30-60度角自然斜向下运动🎨中文显示:完美支持中文字体,显示"斜向流星雨来啦!"等文字整个程序运行流畅,达到60FPS的丝滑体验,让你仿佛置身于真实的流星雨之中!

Code_流苏:在代码中寻诗意,在实践中觅真知 6060

java 验证码 ValidateCode.jar使用 报错

如何使用: 1.导入ValidateCode.jar包 2.粘贴代码。。。。 @RequestMapping("/getCode") public void getCode(HttpServletRequest request, HttpServletResponse response) throws IOException { //参数列表:宽度,高度,字符数,...

changaspl 959

玩转大语言模型——使用华为官方MindIE-Server镜像方式部署DeepSeek模型

本文将详细介绍在国产Linux系统欧拉中使用华为官方MindIE-Server镜像方式部署DeepSeek模型。一般情况下华为昇腾800I服务器可以推理DeepSeek-R1-70B,4张300I-Duo服务器可以推理DeepSeek-R1-32B。在配置中尽量贴合官方文档,包含用到的一些其他的技术细节,便于零基础入门使用。

艾醒的博客 1289

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java实现验证码功能

验证码一般用于登陆界面的防机器验证,但自已写一个验证码组件较为麻烦,我们可以用ValidateCode组件来实现,以下通过两个示例来演示ValidateCode的用法,最后附jar包,可自行下载。生成验证码,调用该方法可以重新生成验证码,实例化对象时会自动调用该方法生成一个默认的验证码,后续可再次调用生成。实例化对象,指定宽度和高度,默认验证码位数为5为位,障碍线为150;实例化对象,指定宽度、高度、验证码位数、障碍线数量;将生成的验证码图像写入输出流对象,可用于web端。

2301_77042303的博客 5537

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

java怎么把验证码下载下来_Java验证码 ValidateCode.jar的使用(附下载链接)

ValidateCode.jar下载地址:点击下载 密码:aiyb前端代码:Titlefunction changeCode() {$("#verifyCode-img").attr("src","user/verifyCode?time="+new Date().getTime());}验证码: 看不清,换一张Controller层代码://验证码@RequestMapping("...

weixin_42175971的博客 409

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java生成图片验证码,ValidateCode.jar包用法简单实例

1 首先下载ValidateCode.jar包,添加到项目中 下载链接:https://download.youkuaiyun.com/download/qq_39403545/10773564(已有的可以忽略)   2 用法简单实例 @RequestMapping("/getCode") public void getCode(HttpServletRequest request, Htt...

一条吃软饭的软狗 4607

图形验证码(ValidateCode)

效果图 其实现在很少有再用这种验证方式了的,不过作为经典的图形验证码验证,留恋一下 导入依赖ValidateCode.jar就可以用了,当然也可以自己去写一个验证图形(实际上很简单) 这里介绍的是java的用法,其他语言大同小异 后端代码部分 写一个请求,专门请求验证码 做两件事,一是把验证码存入session供验证,二是把验证码渲染给前端 @Controller public class Co...

qq_41750712的博客 2066

ValidateCode使用

1、将ValidateCode.jar放到WebRoot/lib目录下。 2、Servlet编写: public class ServletDemo4 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExce...

域清风 3672

ValidateCode图形验证码实现

图形验证码在行业被广泛应用,几乎随处可见。图形验证码的实现代码也五花八门。如果你去深究,发现其实都是换汤不换药,我们都一样! 使用图形验证码,主要也就是分为两类(大体分类),一类是自己写验证码生成的工具类(当然也是去百度copy一通,大神除外),一类是使用第三方的验证码生成工具包。我个人就喜欢第二种,站在巨人的肩膀上。 今天我们使用第三方的工具包ValidateCode来完成图形验证码的实现。主要代码就几行,用起来就是两个字,爽! 废话不多说,直接上代码! 第一步:准备页面 <html> &lt

qq_33258502的博客 1175

用java写的验证码_用java写的验证码

这里直接用到一个ValidateCode.jar包,也就是test方法里面写的内容。服务器servlet代码如下:import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.IOException;import java....

weixin_42502503的博客 104

java生成验证码工具类_Java生成图形验证码工具类

生成验证码效果ValidateCode.java 验证码生成类package cn.dsna.util.images;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.FileOutputStream;imp...

weixin_33640562的博客 693

java验证码生成代码

int width = 120; int height = 25; BufferedImage image = new BufferedImage(120, 25, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); // 边线 g.setColor(Color.GREEN); g....

qq_34014347的博客 188

验证码的生成

验证码的生成 当我们在编写登录页时,会编写三个属性,下面提供了一种生成验证码的方法供大家参考. 1.导入ValidateCode.jar(生成验证码的基础) 2.创建生成验证码的Servlet 前端jsp页面如下: <input class="yanzhengma" id="vcode" type="text" placeholder="验证码"/> <img id="pagecode" src="userInfo?action=code"> 后端java代码如下: @WebSe

invincible_yj的博客 416
上一篇: SpringMVC常用注解@Controller,@Service,@repository,@Component
下一篇: 脚本
TuxedoLinux
博客等级 码龄9年 268粉丝 34原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值