`
zretc
  • 浏览: 20214 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaWeb中验证码的实现

    博客分类:
  • Java
阅读更多

 

Web程序中,验证码是经常使用的技术之一。Web程序永远面临未知用户和未知程序的探测。为了防止恶意脚本的执行,验证码技术无疑是首选方案之一。本文将讨论如何在JSPServlet中使用验证码技术。

 

验证码的产生思路很简单,在Servlet中随机产生验证码字符序列,并计入session中,JSP中以图片的形式进行显示。当用户在JSP表单中输入验证码并提交时,在相应的Servlet中验证是否与session中保存的验证码一致。下面通过代码,一次演示验证码产生和实现的验证的过程。

 

1.验证码的产生

 

我们需要创建一个名为ValcodeServletservlet并在其doGet()方法中完成验证码的产生。首先通过随机数的产生类Random随机产生一个4位的验证码,并将其存入session;然后使用BufferedImageGraphics类把验证码转为图片,当然为了起到较好的效果,我们需要添加一些干扰线;最后使用ImageIO将图片输出。详细代码如下:

 

protectedvoiddoGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {

       // 告知浏览当作图片处理

       response.setContentType("image/jpeg");

 

       // 告诉浏览器不缓存

       response.setHeader("pragma", "no-cache");

       response.setHeader("cache-control", "no-cache");

       response.setHeader("expires", "0");

 

       // 产生由4位数字构成的验证码

       int length = 4;

       String valcode = "";

       Random rd = new Random();

       for(int i=0; i<length; i++)

           valcode+=rd.nextInt(10);

 

       // 把产生的验证码存入到Session

       HttpSession session = request.getSession();

       session.setAttribute("valcode", valcode);

 

       // 产生图片

       int width = 80;

       int height = 25;

       BufferedImageimg = newBufferedImage(width, height,BufferedImage.TYPE_INT_RGB);

 

       // 获取一个Graphics

       Graphics g = img.getGraphics();

 

       // 填充背景色

       g.setColor(Color.WHITE);

       g.fillRect(0, 0, width, height);

 

       // 填充干扰线50

       for(int i=0; i<50; i++){

           g.setColor(new Color(rd.nextInt(100)+155,rd.nextInt(100)+155,rd.nextInt(100)+155));

           g.drawLine(rd.nextInt(width), rd.nextInt(height),rd.nextInt(width), rd.nextInt(height));

       }

 

       // 绘制边框

       g.setColor(Color.GRAY);

       g.drawRect(0, 0, width-1, height-1);

 

       // 绘制验证码

       Font[] fonts = {new Font("隶书",Font.BOLD,18),new Font("楷体",Font.BOLD,18),new Font("宋体",Font.BOLD,18),new Font("幼圆",Font.BOLD,18)};

       for(int i=0; i<length; i++){

           g.setColor(new Color(rd.nextInt(150),rd.nextInt(150),rd.nextInt(150)));

           g.setFont(fonts[rd.nextInt(fonts.length)]);

           g.drawString(valcode.charAt(i)+"", width/valcode.length()*i+2, 18);

       }

 

       // 输出图像

       g.dispose();

       ImageIO.write(img, "jpeg", response.getOutputStream());

    }

 

上面的代码只是产生了一个常规的验证码,我们可以根据自己的需要对验证码的产生策略和干扰线进行调整。Servlet编写完毕,别忘了在web.xml中进行配置以便能在JSP中调用,其代码如下:

 

<servlet>

<description></description>

<display-name>ValcodeServlet</display-name>

<servlet-name>ValcodeServlet</servlet-name><servlet-class>org.icer.jee.valcode.servlet.ValcodeServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>ValcodeServlet</servlet-name>

<url-pattern>/ValcodeServlet</url-pattern>

</servlet-mapping>

 

 

 

2.验证码的显示

 

产生验证码的servlet编写完毕,并且已经web.xml中进行了配置,那么我们在input.jsp中使用<img />标记以图片的方式调用servlet即可显示验证码。

当然为了能起到验证效果,本例中还包含了简单的表单。为了放置验证码无法识别,此处还提供了看不清点击换一张功能,用户点击图片时重新加载验证码图片(问号是为了放置浏览器缓存而不能实现重新请求图片)。JSP中表单部分代码如下:

 

<formname="form1"method="post"action="LoginServlet">

验证码:

<inputname="vcode"type="text"class="input02"id="vcode">

<imgsrc="ValcodeServlet"align="absmiddle"title="看不清,点击换一张"onClick="this.src=this.src+'?'"/>

<inputtype="submit"name="button"id="button"value=" 提交 ">

</form>

 

3.实现验证功能

 

当表单提交到CheckServlet时,对用户填写的验证码和session中存储的验证码进行比对,根据结果给出不同提示。代码如下:

 

protectedvoiddoPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {

       // 获取验证码

       String valcode = request.getSession().getAttribute("valcode").toString();

       // 获取用户填写的验证码

       String vcode = request.getParameter("vcode");

       // 进行验证

       if(!valcode.equals(vcode))

           System.out.println(">>>验证码错误!");

       else

           System.out.println(">>>验证码正确!");

    }

 

上面只是根据验证情况在控制台进行了输出,使用时根据实际的业务逻辑需求进行修改即可。

 

    总起来说,验证码技术本质上就是利用Java绘图技术把随机产生的验证码字符图形化,并在JSP中以图形调用,最后在用户提交表单后在对应的servlet中进行验证。本文只是提供验证码的基本实现思路,希望大家能灵活应用。

 

 

作者:中软卓越天津ETC

 

分享到:
评论

相关推荐

    javaWeb使用验证码实现简单登录

    JavaWeb使用验证码实现简单登录 在JavaWeb开发中,验证码是一种常用的安全机制,用于防止机器人和恶意攻击。下面将详细介绍如何使用验证码实现简单登录功能。 验证码的原理 验证码的原理是基于HTTP协议的请求响应...

    javaWeb中验证码的实现

    在做web开发的时候,常常需要使用到验证码。验证码的作用其实非常重要,通过它可以有效的防止有人通过使用暴力的手段破解掉用户的账号密码信息,验证码是一串随机生成的数字组合,而最重要的就是它具有扰乱人眼的...

    javaweb邮箱发送验证码功能实现

    在JavaWeb开发中,实现邮箱发送验证码功能是常见...总之,JavaWeb中实现邮箱发送验证码功能涉及到配置邮件服务、使用JavaMail API发送邮件以及可能的验证码管理逻辑。确保正确配置并理解这些步骤,就能顺利实现该功能。

    javaWeb 生成验证码程序

    JavaWeb验证码生成程序是Web开发中的一个重要组成部分,主要用于防止恶意自动化的机器人或脚本进行非法操作,例如批量注册、刷票等。在这个程序中,我们通常会遇到以下几个关键知识点: 1. **验证码类型**:验证码...

    javaweb验证码实现demo

    这个“javaweb验证码实现demo”很可能是为了展示如何在Java Web应用中集成验证码功能。 验证码的实现主要包括以下几个关键步骤: 1. **生成随机验证码**:首先,我们需要创建一个可以生成随机字符串的方法。这个...

    javaWeb验证码实现

    在这个“javaWeb验证码实现”的主题中,我们将深入探讨如何使用Servlet技术来创建一个简单的基于图像的验证码。 验证码的生成通常包含以下几个步骤: 1. **生成随机字符串**:首先,我们需要生成一个随机的字符串...

    javaweb_验证码登陆源码

    JavaWeb验证码登录源码解析与应用 在JavaWeb开发中,验证码是一种常用的安全机制,用于防止恶意自动化的机器人或爬虫程序尝试登录用户账户。在本项目中,开发者使用了Servlet技术来实现这一功能,旨在增强网站登录...

    JAVAWEB验证码功能实现附源代码

    这个简单的JAVAWEB验证码实现是一个基础的教程实例,适合初学者理解和学习。在实际项目中,可能需要考虑更多的安全因素,例如使用更复杂的验证码生成算法、集成第三方库(如Google的reCAPTCHA)或者使用更安全的HTTP...

    javaweb登录验证码的实现方法

    JavaWeb 登录验证码的实现方法 JavaWeb 登录验证码是指在 Web 应用程序中,为了防止机器人和恶意攻击,需要用户输入的一串验证码,以证明用户是真人的身份验身份,以确保应用程序的安全性。下面是 JavaWeb 登录...

    javaweb用户验证码登录session例子

    在Java Web开发中,用户登录验证是不可或缺的一部分,而在这个"javaweb用户验证码登录session例子"中,我们将深入探讨如何结合验证码、用户密码以及Session技术来实现安全的登录过程。Session是Web应用中用于跟踪...

    javaWeb简单的中文验证码

    总结来说,JavaWeb中的中文验证码实现涉及到字符生成、图像处理和用户验证等多个环节。通过合理的编程和设计,我们可以创建出既安全又易于用户使用的中文验证码系统。在实际开发中,还应考虑性能优化,如缓存生成的...

    JAVAWEB图文验证码模块源代码

    第2种是Ajax实现无刷新的彩色验证码,如图1.2所示。第3种是加密的验证码,如图1.3所示。 登录用户名和密码统一为mr,mrsoft。 图1.1 英文、数字和中文混合的彩色验证码的运行结果 图1.2 Ajax实现无刷新的彩色...

    javaWeb验证码

    在JavaWeb开发中,验证码(CAPTCHA)是一种用于防止恶意自动化程序(如机器人)进行非法操作的安全机制。它通常由一组随机生成的字符或数字组成,用户需要在短时间内正确输入这些字符才能完成某个操作,如注册、登录...

    两种javaweb验证码产生方法

    验证码在Java Web开发中是一种常见的安全机制,用于防止自动化脚本或机器人进行恶意操作,如批量注册、频繁登录等。本篇文章将详细讲解两种在Java Web中生成验证码的方法,并提供相应的源码示例。 1. 图片验证码...

    JavaWeb验证码

    JavaWeb中常见的验证码实现主要集中在图像验证码上,这种验证码通过生成随机字符或数字,结合一定的干扰元素,形成一张图片展示给用户,用户输入图片中显示的字符或数字以完成验证。 要实现一个JavaWeb图像验证码,...

    JavaWeb项目生成验证码

    JavaWeb项目生成随机验证码,使用IDEA开发,可以导入到Eclipse和MyEclipse中

    JavaWeb练手-实现登录注册(含验证码和表单验证)

    在本项目"JavaWeb练手-实现登录注册(含验证码和表单验证)"中,主要涉及了几个关键的JavaWeb开发技术,包括Servlet、HTML、JSP以及验证码和表单验证的实现。以下是这些知识点的详细说明: 1. **Servlet**:Servlet...

    javaweb简单的一次性验证码

    在这个简单的Servlet实现中,我们可以预期以下几个关键知识点: 1. **Servlet**:Servlet是Java中处理HTTP请求的核心组件,它扩展了服务器的功能,允许我们编写代码来响应HTTP请求。在这个验证码系统中,Servlet将...

Global site tag (gtag.js) - Google Analytics