`

为登录生成彩色验证码,防止不断提交

阅读更多

读者可能经常在一些论坛发表帖子或用户登录时要求用户输入验证码,并在验证码输入框后生成了一张验证码的图片,只有验证码输入正确后

才能继续下一步操作,那么使用验证码有什么用处,在JSP中又如何实现呢? Java世界

  举个例子,在论坛中发表帖子时,一般的Web程序都是以提交表单形式来提交帖子的内容,接收数据后插入到数据库的表中;如果有人不

怀好意,利用一些自动提交表单的工具来不断的提交表单,则会导致数据库中的数据迅速膨胀,很快就会导致数据库的空间被用光。如果使用

了验证码,由于验证码生成的是图片,程序很难识别出来,而且图片中还可加入干扰,即便是使用了OCR(景像识别)技术也很难识别出来,

当验证码没有通过时,数据就不会被提交到数据库中。 Javaif.Com

    为登录生成彩色验证码
  本例将在登录页面生成彩色验证码,这样用户在登录时就要输入用户名、密码和验证码,只有三个同时通过才会通过检验。

 

  这里,把生成验证码图片的程序封装为一个JavaBean,这个JavaBean的源代码如下:

makeCertPic.java   
  package pic;   
  import java.awt.Color;   
  import java.awt.Font;   
  import java.awt.Graphics;   
  import java.awt.image.BufferedImage;   
  import java.io.IOException;   
  import java.io.OutputStream;   
  import java.util.Random;   
  import javax.imageio.ImageIO;   
  /**  
   * @author dzy  
   * 生成验证码图片  
   */  
  public class makeCertPic {   
    //验证码图片中可以出现的字符集,可根据需要修改   
    private char mapTable[]={   
      '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'};   
    /**  
    * 功能:生成彩色验证码图片   
 
java世界_Javaif.com  
 
    * 参数width为生成图片的宽度,参数height为生成图片的高度,参数os为页面的输出流  
    */  
   public String getCertPic(int width, int height, OutputStream os) {   
  if(width<=0)width=60;   
  if(height<=0)height=20;    
  BufferedImage image = new BufferedImage(width, height,    
     BufferedImage.TYPE_INT_RGB);    
  // 获取图形上下文    
  Graphics g = image.getGraphics();    
  // 设定背景色    
  g.setColor(new Color(0xDCDCDC));    
  g.fillRect(0, 0, width, height);    
  //画边框    
  g.setColor(Color.black);    
  g.drawRect(0,0,width-1,height-1);    
  // 取随机产生的认证码   
  String strEnsure = "";   
  // 4代表4位验证码,如果要生成更多位的认证码,则加大数值   
  for(int i=0; i<4; ++i) {   
 strEnsure+=mapTable[(int)(mapTable.length*Math.random())];   
  }      
java世界_Javaif.com   
  
  
  //   将认证码显示到图像中,如果要生成更多位的认证码,增加drawString语句   
  g.setColor(Color.black);    
  g.setFont(new Font("Atlantic Inline",Font.PLAIN,18));    
  String str = strEnsure.substring(0,1);    
  g.drawString(str,8,17);     
  str = strEnsure.substring(1,2);    
  g.drawString(str,20,15);    
  str = strEnsure.substring(2,3);    
  g.drawString(str,35,18);      
  str = strEnsure.substring(3,4);    
  g.drawString(str,45,15);    
  // 随机产生10个干扰点   
  Random rand = new Random();   
  for (int i=0;i<10;i++) {    
   int x = rand.nextInt(width);    
   int y = rand.nextInt(height);    
   g.drawOval(x,y,1,1);    
  }    
  // 释放图形上下文   
  g.dispose();      
  try {   
   // 输出图像到页面    
   ImageIO.write(image, "JPEG", os);    
java世界_Javaif.com   
  
  
  } catch (IOException e) {   
   return "";   
  }     
  return strEnsure;   
  }   
  }  

 

 

Java世界

  在getCertPic()方法中,首先创建了一个内存图像的实例对象,再得到此内存图像的图形上下文对象,接着再用这个上下文对象画背景、

边框。接下来,随机生成4个在mapTable[]数组中的字符,组成字符串作为验证字符串,并输出在内存中,为了造成一定的干扰,随机画了10

个干扰点,如果要加大干扰效果,可再多画一些点。
makeCertPic.jsp页面用于调用生成验证码图片的JavaBean,并在客户端显示,源代码如下:

makeCertPic.jsp

<%@page contentType="image/jpeg" %>  
  <jsp:useBean id="image" scope="page" class="pic.makeCertPic" />  
  <%   
 Stringstr=image.getCertPic(0,0,response.getOutputStream());   
  // 将认证码存入SESSION   
   session.setAttribute("certCode", str);    
  %>  

 

 Javaif.Com

  这里把生成的验证码作为session变量写入,因此在接收登录页面输入的数据页面中,可用用户输入的验证码和这个session变量作比较,

如果相同则表示验证通过。
  LoginPic.jsp

<%@ page contentType="text/html;charset=GB2312" %>  
  <html>  
    <head><title>登录页面</title></head>  
   <body>  
     <table align="center" border="0">  
   <traligntralign="center"><td><fontcolorfontcolor="red"><html:errors/></font></td></tr>  
      <tr align="center"><td>系统登录</td></tr>  
      <form action="loginCheck.jsp" method="post" focus="username">  
      <tr><td>用户名:<input type="text" name="username"/></td></tr>  
      <tr><td>密  码:<input type="password"name="password"/></td></tr>  
      <tr><td>验证码:<input type="text" name="certCode"/>    
  
java世界_Javaif.com   
  
      <img src="makeCertPic.jsp">  
      </td></tr>  
  <traligntralign="left"><td>           
      <input type="submit" value="确定"/></td></tr>  
      </form>  
     </table>  
    </body>  
   </html>  

 

登录页面的运行结果如图18-11所示。 www.Javaif.Com


  验证码的输入是否正确可用如下语句验证:

String certCode=request.getParameter("certCode");   
  if(certCode.equals((String)session.getAttribute("certCode")))   
  out.print("验证码输入正确");   
  else   
  out.print("验证码输入错误");  

 

分享到:
评论

相关推荐

    JSP为登录生成彩色验证码

    **JSP为登录生成彩色验证码** 在Web应用中,验证码是一种常见的安全机制,用于防止自动化的机器人或恶意软件进行非法操作,例如批量注册、频繁登录等。本篇将详细介绍如何在JSP环境下创建一个彩色的验证码,以提高...

    JSP自动生成彩色验证码

    本项目重点在于使用JSP(Java Server Pages)技术自动生成彩色验证码,为用户提供一个视觉上更友好的验证体验。下面我们将深入探讨这个主题。 首先,验证码通常由一组随机字符组成,这些字符可以是数字、字母或其他...

    登录注册彩色验证码刷新

    彩色验证码: 1.原理:随机生成一个包含字符串的图片,用户读取图片中的字符信息,将其输入到指定文本框中,随着登录或者注册功能的提交将其传递给服务器进行验证处理。 2.作用:防止通过程序进行批量注册或者暴力...

    JSP生成彩色验证码程序

    本教程将深入讲解如何使用JSP来生成彩色的验证码程序。 一、验证码的基本原理 验证码的主要目的是通过要求用户输入图片上显示的一串随机字符,来验证用户是人而非机器。这些字符通常是扭曲的,以便增加机器识别的...

    java彩色验证码例子

    Java生成彩色验证码是一种常见的安全措施,用于防止自动化脚本或恶意机器人进行非法操作,例如注册、登录等。在Web开发中,JSP(JavaServer Pages)可以用来创建动态的网页内容,包括验证码图像。以下是对标题和描述...

    JSP生成彩色验证码程序例子

    在这个"JSP生成彩色验证码程序例子"中,我们将深入探讨如何利用JSP实现一个功能丰富的彩色验证码生成器。 验证码的主要目的是为了防止自动机器人或恶意脚本进行非法操作,例如防止垃圾邮件、注册机等。它通过显示一...

    JSP实现彩色验证码

    3. **图像处理**:生成彩色验证码需要我们创建并绘制一个图像。这涉及到`java.awt`和`javax.imageio`包中的类,如`BufferedImage`、`Graphics2D`等。我们需要定义图像的大小,然后在图像上画出随机颜色的背景、线条...

    java jsp 生成彩色验证码+验证功能代码,可直接运行,没有数据库

    在这个提供的压缩包中,包含的是一个基于Java实现的彩色验证码生成与验证的功能代码,适用于网页安全验证,防止自动机器人或恶意攻击。验证码通常由随机字符组成,目的是确保用户是人类而非自动化程序。 1. **彩色...

    JSP彩色验证码的实现.

    3. **彩色背景**:为了增强视觉效果,我们可以为验证码生成彩色背景。可以随机选取RGB颜色值,然后使用`Graphics2D`的`setColor()`方法设置背景色。 4. **绘制字符**:在背景上绘制字符,同样可以设置随机颜色,...

    优化过的 c# 彩色验证码

    在IT领域,验证码(CAPTCHA)是一种用于验证用户是否为人类的工具,常用于防止自动化的机器人或恶意软件进行非法操作。"优化过的C#彩色验证码"是指使用C#编程语言实现的一种经过优化的彩色图像验证码。这个话题涵盖...

    asp彩色验证码源码

    "asp彩色验证码源码"是一个基于ASP实现的验证码功能的源代码,它可能包含了创建随机图形验证码的过程,以及验证用户输入与服务器生成验证码是否匹配的逻辑。 验证码的主要功能是通过图像展示一串随机字符,要求用户...

    JSP彩色验证码【100%可以用,亲自测试可用,带验证功能实例】

    本文将详细介绍如何在JSP中实现彩色验证码的生成与验证功能。彩色验证码不仅能够提高网站的安全性,还可以提升用户体验。根据文档的要求,我们需要创建三个JSP页面:`image.jsp`用于生成验证码图像,`a.jsp`作为展示...

    使用jsp生成彩色汉字验证码

    ### 使用JSP生成彩色汉字验证码知识点详解...综上所述,通过使用JSP生成彩色汉字验证码不仅能够有效地增强网站的安全防护能力,还能为用户提供更好的交互体验。开发者可以根据具体需求调整参数,以达到最佳的应用效果。

    PHP生成图片验证码

    在IT行业中,验证码是一种常见的安全机制,用于防止自动化的...通过实践,你可以不断优化验证码的生成逻辑,提高其安全性和用户体验。如果你对其他IT资源感兴趣,可以随时进行交流和探讨,共同提升我们的专业技能。

    彩色验证码的实现

    2. **图像处理**:生成彩色验证码需要对图像进行处理。这包括创建一个随机的字符串(通常包含字母和数字),将这些字符以特定方式绘制到图像上,使用不同的颜色、字体和旋转角度以增加识别难度。 3. **色彩选择**:...

    JSP彩色验证码Md5类

    在IT行业中,验证码是一种常见的安全机制,用于防止自动化的机器人或恶意软件进行非法操作,例如注册、登录等。本主题将深入探讨“JSP彩色验证码Md5类”,它结合了Java验证码技术和MD5哈希算法,以提高安全性。 ...

    jcaptcha做jsp彩色验证码

    标题"jcaptcha做jsp彩色验证码"即指使用jCaptcha库在JSP应用中生成彩色的验证码图片。 首先,我们需要引入jCaptcha的相关依赖。在这个案例中,我们看到压缩包内的"jcaptcha-all-1[1].0-RC6.jar"就是jCaptcha的核心...

    中文彩色验证码实现

    在这个特定的案例中,我们关注的是“中文彩色验证码的实现”,这意味着我们要讨论如何创建一种能显示中文字符且带有颜色元素的验证码系统。 中文验证码的实现通常涉及到以下几个关键知识点: 1. **字符生成**:...

    Jcaptcha 彩色验证码实例

    以下是一个简单的示例代码,展示如何使用Jcaptcha生成一个彩色验证码: ```java import com.octo.captcha.component.image.backgroundgenerator.RandomListBackgroundGenerator; import ...

    php高安全验证码生成类

    验证码是Web应用中常用的一种安全机制,用于防止自动机器人或者恶意攻击者进行非法操作,例如批量注册、恶意登录等。本篇文章将详细讲解基于PHP实现的高安全验证码生成类,以及如何利用字体库来增强其安全性。 ...

Global site tag (gtag.js) - Google Analytics