实现步骤:
验证码设置类;
页面;
登录验证中检测验证码;
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 这个的实现很好,没问题。
相关推荐
总结来说,"ajax无页面刷新验证、struts结构+ajax+验证码jsp页面"这个主题探讨了如何在Struts2框架下利用Ajax技术实现验证码的无刷新更新和验证,为用户提供更流畅的交互体验,同时也增加了应用的安全性。...
struts2+spring整合登陆验证经典完整案例!期余JAR文件在struts2+spring整合登陆验证经典完整案例!(JAR)这个中,免积分下载! 部署Web应用请按如下步骤进行: 1. 进入reg_login路径下,将mysql.sql脚本中的语句...
在这个"struts2+spring3验证码登录实例"中,验证码功能是一个重要的安全措施,它可以防止恶意的自动登录尝试或机器人攻击。验证码通常由一串随机生成的字符或数字组成,用户需要在输入框中正确输入才能完成登录。...
在"Extjs4登录功能+验证码+struts2"这个主题中,我们将深入探讨如何利用ExtJS4构建一个带有验证码功能的登录界面,并结合Struts2后端框架实现数据验证和处理。 首先,登录功能是Web应用的基础部分,通常包含用户名...
Struts2+Spring+Hibernate是Java Web开发中的经典组合,常被称为SSH框架。这个组合提供了模型-视图-控制器(MVC)架构模式,用于构建高效、可维护的Web应用程序,特别是登录和注册模块。接下来,我们将深入探讨这些...
本例主要是实现了struts2+spring3+hibernate3的 基本框架搭建的注册登录,以及用户增删改查,适于初学者学习。 包括:注册 登录功能 分页的实现 前端校验 验证码的实现 注册时有ajax 校验,登录时 后台从数据库...
开发环境: eclipse Kepler JEE IDE + Tomcat v6.0 + Struts-2.3.15(最新版) 步骤: 1. 下载后解压,import to eclipse as a project. 2. 启动 Tomcat v6.0 3. 打开...
### Struts2 生成验证码知识点解析 #### 一、引言 在Web应用程序开发中,验证码是一种常见的安全机制,用于防止自动化的恶意攻击,如垃圾邮件发送或非法登录尝试等。Struts2作为一款流行的Java Web应用框架,支持...
struts2+json+jquery局部刷新实现注册验证,包括前台的用户名、密码、手机、身份证、邮箱(包含发邮件技术)、邮箱验证码、验证码的验证,用到的是json+jquery,后台则是用struts2+java类
2. **配置Struts2**:在Struts2的配置文件(struts.xml)中,我们需要定义一个Action,这个Action将负责生成验证码。Action应该有一个结果类型,指向一个JSP页面或者FreeMarker模板,用于显示验证码图片。 3. **...
Struts2、Hibernate和MySQL是三个在Web开发中广泛应用的技术,它们共同构成了一个强大的后端框架,用于构建高效、可维护的Web应用程序。本项目利用这些技术实现了用户登录功能,以下将详细介绍每个部分的关键知识点...
论坛系统(Struts 2+Hibernate+Spring实现) <!DOCTYPE validators SYSTEM "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd" PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"> -...
我们这里采用的是ajax+struts2来做的这个验证。 我们新建一个web工程。然后需要导入struts的相应包。之后我们需要写一个类来生成验证码。 博客地址:http://blog.csdn.net/sdksdk0/article/details/51755489
Struts2+Spring3+Hibernate3框架整合AJAX+JQuery实现登录、注册以及验证码和验证注册用户的用户名唯一性 代码简单易懂且肯定正确,有丰富的注释肯定能看明白,本来不想设资源分,但是看到凡是上传代码的都设了资源分...
Struts2+Spring+Hibernate(简称S2SH)是一个经典的Java Web开发框架组合,用于构建高效、可维护的Web应用程序。这个"struts2+srping+hibernate 登录实例"应该是一个演示如何整合这三个框架来实现用户登录功能的项目...
Struts2、jQuery和Ajax是Web开发中的三大关键技术,它们结合使用可以构建高效、动态且用户友好的登录验证系统。以下是对这些技术及其在登录验证中的应用的详细说明。 Struts2是一个基于MVC(Model-View-Controller...
### Struts2 图片验证码实现解析 #### 一、引言 在Web应用程序中,图片验证码(CAPTCHA)被广泛用于防止自动化攻击和机器人操作,确保用户是真实的人类。Struts2框架提供了丰富的功能来集成这样的安全特性,本文将...
4. **插件支持**:Struts2拥有丰富的插件库,可以轻松扩展功能,如国际化、文件上传下载、验证码等。 **SQL Server 2000数据库** SQL Server 2000是微软公司推出的数据库管理系统,它具有稳定性和高性能的特点,...
在Struts2框架下实现验证码功能,可以帮助提升用户体验和系统安全性。以下将详细讲解如何在Struts2中创建前端注册验证码。 首先,验证码的实现通常包括两个主要部分:后端生成验证码和前端展示及验证。 1. **后端...
在描述中提到的“验证码”功能,通常可以通过Struts2的拦截器来实现,例如在用户提交表单前检查输入的验证码是否正确。 Hibernate3是对象关系映射(ORM)工具,它简化了数据库操作,将Java对象与数据库表进行映射,...