`
sky_yangwang
  • 浏览: 52701 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

struts2+验证码

阅读更多

 

实现步骤:

验证码设置类;

页面;

登录验证中检测验证码;

Xml设置;

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

代码:

 

页面

<s:textfield name="rand" size="5" label="验证码"/>

      <img src="rand.action"   onclick="changeValidateCode(this)" title="点击图片刷新验证码"/>

<script type="text/javascript"> 

function changeValidateCode(obj) { 

var timenow = new Date().getTime(); 

obj.src="rand.action?d="+timenow; 

</script>

 

 

登录验证中检测验证码

//从session中取出RandomCode.java 中生成的验证码random    

String random=(String)(session.get(Struts2PortfolioConstants.CHECK_CODE));

rand = rand.toUpperCase();

if(random.equals(rand)){

...

}

private String rand; //省略get/set

 

Xml

<action name="rand" class="service.commonality.RandomCode">       

         <result type="stream">       

              <param name="contentType">image/jpeg</param>       

              <param name="inputName">inputStream</param>       

         </result>    

     </action>

 

验证码设置类

package service.commonality;

 

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.image.BufferedImage;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.util.Calendar;

import java.util.Map;

import java.util.Random;

 

import javax.imageio.ImageIO;

import javax.imageio.stream.ImageOutputStream;

 

import model.bean.Struts2PortfolioConstants;

 

import org.apache.struts2.interceptor.SessionAware;

 

import com.opensymphony.xwork2.ActionSupport;

 

public class RandomCode extends ActionSupport implements SessionAware{

private ByteArrayInputStream inputStream;

    // 得到规定字符范围的随机字符串,长度自己确定

  //Calendar.getInstance().getTimeInMillis()  获得相异的随机数;

     private int codeCount = 5; //随机数长度;

     private String CreateRandomCode(int codeCount){

 

      String allChar = "2,3,4,5,6,7,8,9,Q,W,E,R,T,Y,U,P,A,S,D,F,G,H,J,K,L,Z,X,C,V,B,N,M";//32

      String[] allCharArray = allChar.split(",");

      String randomCode = "";

        int temp = -1;

        Random rand = new Random();

 

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

         {

             if (temp != -1)

             {

                 rand = new Random(i * temp * ((int)Calendar.getInstance().getTimeInMillis()));

             }

             int t = rand.nextInt(32);

             if (temp == t)

             {

                 return CreateRandomCode(codeCount);

             }

             temp = t;

             randomCode += allCharArray[t];

         }

         return randomCode;

     }

    

public String execute() throws Exception{

   //在内存中创建图象  

       int width=70, height=20;  

       BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);  

       //获取图形上下文  

       Graphics g = image.getGraphics();  

       //生成随机类  

       Random random = new Random();  

       //设定背景色  

       //g.setColor(Color.white);

       g.setColor(getRandColor(200,250));

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

       //设定字体 ,字体的大小应该根据图片的高度来定。

       g.setFont(new Font("Times New Roman",Font.PLAIN,18));  

       //画边框

       //g.setColor(Color.gray);

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

       

       //随机产生i条干扰线,使图象中的认证码不易被其它程序探测到  

       g.setColor(getRandColor(160,200));

       //g.setColor(Color.gray);  可以直接指定。

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

       {  

        int x = random.nextInt(width);  

        int y = random.nextInt(height);  

           int xl = random.nextInt(12);  

           int yl = random.nextInt(12);  

           g.drawLine(x,y,x+xl,y+yl);  

       } 

       

       // 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。

       //int red = 0, green = 0, blue = 0;

       //red = random.nextInt(200);

       //green = random.nextInt(200);

       //blue = random.nextInt(200);

       

       //取自定义的认证码 

       String sRand = CreateRandomCode(codeCount);

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

           //用随机产生的颜色将验证码绘制到图像中。

           //g.setColor(new Color(red, green, blue));  调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成

           g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));

           //sRand,每次取一位

           g.drawString(sRand.substring(i, i+1),13*i+6,16);  

       }

       

       //将认证码存入session

       session.put(Struts2PortfolioConstants.CHECK_CODE, sRand);

       

       //图象生效  

       g.dispose();  

       ByteArrayOutputStream output = new ByteArrayOutputStream();  

       ImageOutputStream imageOut = ImageIO.createImageOutputStream(output);  

       ImageIO.write(image, "JPEG", imageOut);  

       imageOut.close();  

       ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray());  

       this.setInputStream(input);  

       return SUCCESS;  

   }  

   /*  

    * 给定范围获得随机颜色  

    */  

   private Color getRandColor(int fc,int bc){  

       Random random = new Random();  

       if(fc>255) fc=255;  

       if(bc>255) bc=255;  

       int r=fc+random.nextInt(bc-fc);  

       int g=fc+random.nextInt(bc-fc);  

       int b=fc+random.nextInt(bc-fc);  

       return new Color(r,g,b);  

  }  

   public void setInputStream(ByteArrayInputStream inputStream) {  

       this.inputStream = inputStream;  

   }  

   public ByteArrayInputStream getInputStream() {  

       return inputStream;  

   } 

   

   private Map session;

public void setSession(Map session) {

// TODO Auto-generated method stub

this.session = session;

}

}

 

//////////////////////////////////////////////////////////////////////////////////////////////////////

 

参考:

http://tmq.iteye.com/blog/286022    这个的实现很好,没问题。

 

分享到:
评论
1 楼 王皓iit 2012-08-03  
用了,可是验证码没有图片显示出来,不知道是怎么回事

相关推荐

    ajax无页面刷新验证、struts结构+ajax+验证码jsp页面

    总结来说,"ajax无页面刷新验证、struts结构+ajax+验证码jsp页面"这个主题探讨了如何在Struts2框架下利用Ajax技术实现验证码的无刷新更新和验证,为用户提供更流畅的交互体验,同时也增加了应用的安全性。...

    struts2+spring整合登陆验证经典完整案例!

    struts2+spring整合登陆验证经典完整案例!期余JAR文件在struts2+spring整合登陆验证经典完整案例!(JAR)这个中,免积分下载! 部署Web应用请按如下步骤进行: 1. 进入reg_login路径下,将mysql.sql脚本中的语句...

    struts2+spring3验证码登录实例

    在这个"struts2+spring3验证码登录实例"中,验证码功能是一个重要的安全措施,它可以防止恶意的自动登录尝试或机器人攻击。验证码通常由一串随机生成的字符或数字组成,用户需要在输入框中正确输入才能完成登录。...

    Extjs4登录功能+验证码+struts2

    在"Extjs4登录功能+验证码+struts2"这个主题中,我们将深入探讨如何利用ExtJS4构建一个带有验证码功能的登录界面,并结合Struts2后端框架实现数据验证和处理。 首先,登录功能是Web应用的基础部分,通常包含用户名...

    Struts2+spring+hibernate(登录与注册模块)

    Struts2+Spring+Hibernate是Java Web开发中的经典组合,常被称为SSH框架。这个组合提供了模型-视图-控制器(MVC)架构模式,用于构建高效、可维护的Web应用程序,特别是登录和注册模块。接下来,我们将深入探讨这些...

    Struts2+Spring3+Hibernate3 用户管理系统实例源码

    本例主要是实现了struts2+spring3+hibernate3的 基本框架搭建的注册登录,以及用户增删改查,适于初学者学习。 包括:注册 登录功能 分页的实现 前端校验 验证码的实现 注册时有ajax 校验,登录时 后台从数据库...

    漂亮登陆界面+Struts2 验证码 完整实现

    开发环境: eclipse Kepler JEE IDE + Tomcat v6.0 + Struts-2.3.15(最新版) 步骤: 1. 下载后解压,import to eclipse as a project. 2. 启动 Tomcat v6.0 3. 打开...

    struts2 生成验证码

    ### Struts2 生成验证码知识点解析 #### 一、引言 在Web应用程序开发中,验证码是一种常见的安全机制,用于防止自动化的恶意攻击,如垃圾邮件发送或非法登录尝试等。Struts2作为一款流行的Java Web应用框架,支持...

    struts2+json+jquery局部刷新实现注册验证

    struts2+json+jquery局部刷新实现注册验证,包括前台的用户名、密码、手机、身份证、邮箱(包含发邮件技术)、邮箱验证码、验证码的验证,用到的是json+jquery,后台则是用struts2+java类

    Struts2的验证码生成

    2. **配置Struts2**:在Struts2的配置文件(struts.xml)中,我们需要定义一个Action,这个Action将负责生成验证码。Action应该有一个结果类型,指向一个JSP页面或者FreeMarker模板,用于显示验证码图片。 3. **...

    Struts2+Hibernate+MySQL实现登录

    Struts2、Hibernate和MySQL是三个在Web开发中广泛应用的技术,它们共同构成了一个强大的后端框架,用于构建高效、可维护的Web应用程序。本项目利用这些技术实现了用户登录功能,以下将详细介绍每个部分的关键知识点...

    论坛系统(Struts 2+Hibernate+Spring实现)

    论坛系统(Struts 2+Hibernate+Spring实现) &lt;!DOCTYPE validators SYSTEM "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd" PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"&gt; -...

    Ajax+Struts2实现验证码验证功能

    我们这里采用的是ajax+struts2来做的这个验证。 我们新建一个web工程。然后需要导入struts的相应包。之后我们需要写一个类来生成验证码。 博客地址:http://blog.csdn.net/sdksdk0/article/details/51755489

    注解 Struts2+Spring3+Hibernate3框架整合AJAX+JQuery实现登录、注册以及验证码和验证注册用户信息

    Struts2+Spring3+Hibernate3框架整合AJAX+JQuery实现登录、注册以及验证码和验证注册用户的用户名唯一性 代码简单易懂且肯定正确,有丰富的注释肯定能看明白,本来不想设资源分,但是看到凡是上传代码的都设了资源分...

    struts2+srping+hibernate 登录实例

    Struts2+Spring+Hibernate(简称S2SH)是一个经典的Java Web开发框架组合,用于构建高效、可维护的Web应用程序。这个"struts2+srping+hibernate 登录实例"应该是一个演示如何整合这三个框架来实现用户登录功能的项目...

    struts2 + jquery +ajax 登录验证

    Struts2、jQuery和Ajax是Web开发中的三大关键技术,它们结合使用可以构建高效、动态且用户友好的登录验证系统。以下是对这些技术及其在登录验证中的应用的详细说明。 Struts2是一个基于MVC(Model-View-Controller...

    struts2图片验证码--struts2图片验证码-(通用版)

    ### Struts2 图片验证码实现解析 #### 一、引言 在Web应用程序中,图片验证码(CAPTCHA)被广泛用于防止自动化攻击和机器人操作,确保用户是真实的人类。Struts2框架提供了丰富的功能来集成这样的安全特性,本文将...

    权限管理struts2+sqlserver2k

    4. **插件支持**:Struts2拥有丰富的插件库,可以轻松扩展功能,如国际化、文件上传下载、验证码等。 **SQL Server 2000数据库** SQL Server 2000是微软公司推出的数据库管理系统,它具有稳定性和高性能的特点,...

    Struts2验证码

    在Struts2框架下实现验证码功能,可以帮助提升用户体验和系统安全性。以下将详细讲解如何在Struts2中创建前端注册验证码。 首先,验证码的实现通常包括两个主要部分:后端生成验证码和前端展示及验证。 1. **后端...

    ssh最新整合+验证码(struts2,hibernate3,spring2.5)

    在描述中提到的“验证码”功能,通常可以通过Struts2的拦截器来实现,例如在用户提交表单前检查输入的验证码是否正确。 Hibernate3是对象关系映射(ORM)工具,它简化了数据库操作,将Java对象与数据库表进行映射,...

Global site tag (gtag.js) - Google Analytics