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

SSH框架中验证码的集成

阅读更多
1.web.xml

<!-- 验证码集成 -->
<servlet>
<servlet-name>ValidateCodeServlet</servlet-name>
<servlet-class>
com.xjtu.util.ValidateCodeServlet
</servlet-class>
<init-param>
<param-name>width</param-name>
<param-value>200</param-value>
</init-param>
<init-param>
<param-name>height</param-name>
<param-value>80</param-value>
</init-param>
<init-param>
<param-name>codeCount</param-name>
<param-value>5</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>ValidateCodeServlet</servlet-name>
<url-pattern>/validateCode.img</url-pattern>
</servlet-mapping>
<!-- 验证码集成 -->
2.com.xjtu.util
package com.xjtu.util;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ValidateCodeServlet extends HttpServlet {

private final Font mFont = new Font("Arial Black", Font.PLAIN, 15); // 设置字体
private final int lineWidth = 2; // 干扰线的长度=1.414*lineWidth
private final int width = 60; // 定义图形大小
private final int height = 22; // 定义图形大小
private final int count = 200;
/**
* 描述:
*
* @param fc
*            描述:
* @param bc
*            描述:
*
* @return 描述:
*/
private Color getRandColor(int fc, int bc) { // 取得给定范围随机颜色

final Random random = new Random();

if (fc > 255) {

fc = 255;
}

if (bc > 255) {

bc = 255;
}

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

return new Color(r, g, b);
}

// 处理post
@Override
public void doPost(final HttpServletRequest request, final HttpServletResponse response)
throws ServletException, IOException {

doGet(request, response);
}

/**
* 描述:
*
* @param request
*            描述:
* @param response
*            描述:
*
* @throws ServletException
*             描述:
* @throws IOException
*             描述:
*/
@Override
public void doGet(final HttpServletRequest request, final HttpServletResponse response)
throws ServletException, IOException {
// response.reset();
// 设置页面不缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/gif");

// 在内存中创建图象
final BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);

// 获取图形上下文
final Graphics2D g = (Graphics2D) image.getGraphics();

// 生成随机类
final Random random = new Random();

// 设定背景色
g.setColor(getRandColor(200, 250)); // ---1

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

// 设定字体
g.setFont(mFont);

// 画边框
g.setColor(getRandColor(0, 20)); // ---2
g.drawRect(0, 0, width - 1, height - 1);

// 随机产生干扰线,使图象中的认证码不易被其它程序探测到
for (int i = 0; i < count; i++) {

g.setColor(getRandColor(150, 200)); // ---3

final int x = random.nextInt(width - lineWidth - 1) + 1; // 保证画在边框之内
final int y = random.nextInt(height - lineWidth - 1) + 1;
final int xl = random.nextInt(lineWidth);
final int yl = random.nextInt(lineWidth);
g.drawLine(x, y, x + xl, y + yl);
}

// 取随机产生的认证码(4位数字)
String sRand = "";

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

final String rand = String.valueOf(random.nextInt(10));
sRand += rand;

// 将认证码显示到图象中,调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.setColor(new Color(20 + random.nextInt(130), 20 + random
.nextInt(130), 20 + random.nextInt(130))); // --4--50-100

g.drawString(rand, (13 * i) + 6, 16);

}

// 将认证码存入SESSION
request.getSession().setAttribute("validateCode", sRand);

// 图象生效
g.dispose();
final java.io.OutputStream os = response.getOutputStream();
// 输出图象到页面
ImageIO.write(image, "PNG", os);
os.flush();
os.close();

}

}
3.jsp
<input type="validate" name="validateCode" id="code"
style="height: 18px; width: 130px; border: solid 1px #cadcb2; font-size: 12px; color: #81b432;">
<img height='17' width="55" src="${ctx }/validateCode.img"
onclick="this.src='${ctx}/validateCode.img?'+Math.random();"
style="cursor: pointer; vertical-align: middle;" />
4.form
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.xjtu.action.form;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

/**
* MyEclipse Struts
* Creation date: 04-02-2011
*
* XDoclet definition:
* @struts.form name="loginForm"
*/
public class LoginForm extends ActionForm {
/*
* Generated fields
*/

/** password property */
private String password;

/** username property */
private String username;

private String validateCode;

/*
* Generated Methods
*/

/**
* Method validate
* @param mapping
* @param request
* @return ActionErrors
*/
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
// TODO Auto-generated method stub
return null;
}

/**
* Method reset
* @param mapping
* @param request
*/
public void reset(ActionMapping mapping, HttpServletRequest request) {
// TODO Auto-generated method stub
}

/**
* Returns the password.
* @return String
*/
public String getPassword() {
return password;
}

/**
* Set the password.
* @param password The password to set
*/
public void setPassword(String password) {
this.password = password;
}

/**
* Returns the username.
* @return String
*/
public String getUsername() {
return username;
}

/**
* Set the username.
* @param username The username to set
*/
public void setUsername(String username) {
this.username = username;
}

public String getValidateCode() {
return validateCode;
}

public void setValidateCode(String validateCode) {
this.validateCode = validateCode;
}
}
5.action
String validateCode = loginForm.getValidateCode();
String validateCodesession = (String)session.getAttribute("validateCode");
if (userinfo.getPwd().equals(password)&& validateCodesession.equals(validateCode) )


分享到:
评论
1 楼 chaorenxx 2013-04-17  
不错,学习了。我新建了struts2 spring3,稍微修改就可以了。

相关推荐

    基于SSH框架的水印验证码

    【基于SSH框架的水印验证码】是一个集成于Java Web开发中的安全验证机制,它结合了Struts2、Spring和Hibernate三大主流开源框架。这个验证方案主要用于防止自动化脚本或者恶意攻击者对网站进行非法操作,确保用户...

    javaWeb SSH框架简易登录

    6. **动手实践**:尝试修改源代码,比如添加权限验证或实现验证码功能,以加深对SSH框架的理解。 总之,"javaWeb SSH框架简易登录"项目是学习SSH框架集成应用的好起点。通过这个项目,你可以了解到JavaWeb开发中的...

    SSH框架整合对员工信息管理

    SSH框架整合对员工信息管理是Java Web开发中的一个重要实践,主要涉及到Spring、Struts2和Hibernate这三个核心组件的集成应用。SSH是Java企业级开发的常用框架,它们各自负责不同的职责,Spring作为IoC(Inversion ...

    基于ssh框架的登录注册系统

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个基于SSH框架的登录注册系统是为初学者和开发者提供的一种基础实践平台,用于理解并掌握如何在实际项目中应用这些...

    SSH框架的用户登录小实例

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个小实例将带你深入理解SSH框架在用户登录功能中的应用。 首先,Struts2作为MVC(Model-View-Controller)框架,...

    基于ssh框架制作的登录实例

    通过这个登录实例,你可以深入理解SSH框架的集成和工作原理,为以后的Web开发打下坚实的基础。在实际项目中,你还可以进一步扩展功能,比如加入验证码、忘记密码、用户注册等模块,增强系统的完整性和安全性。

    简单MyEclipse搭建SSH框架登录实例

    总的来说,这个SSH框架的登录实例是一个学习和实践的好起点,帮助开发者了解SSH框架的基本工作原理和集成方式。随着你对框架理解的加深,你可以逐步添加更多功能,如权限控制、验证码、用户注册等,以构建更复杂的...

    SSH整合示例,另附验证码、ajax,数据库请自配

    下面我们将深入探讨SSH框架、验证码、AJAX以及它们在实际开发中的应用。 **Spring框架** Spring是Java企业级应用的核心框架,它提供了依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented ...

    验证码登陆(SSH初级整合)

    在IT行业中,SSH整合是Java Web开发中常见的一种框架集成方式,它涵盖了Spring、Hibernate和Struts2这三个组件。SSH整合旨在提供一个高效、灵活且易于管理的开发环境,使得开发者能够更便捷地构建企业级应用。在这个...

    SSH框架写的注册登录

    SSH框架,全称为Struts2、Hibernate和Spring的集成框架,是Java开发中常见的MVC(Model-View-Controller)架构模式的一种实现。这个框架组合提供了强大的数据持久化、业务逻辑处理以及页面展示的能力,广泛应用于...

    SSH框架 基本增删改查导出excel

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的MVC架构。这个框架的集成使得开发者能够更有效地处理业务逻辑、持久化数据以及控制应用程序流程。在“SSH框架 基本增删改查导出excel”这...

    SSH框架实现登录和注册

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。在本项目中,我们关注的重点是如何利用SSH框架实现登录和注册功能。SSH框架的强大之处在于它能帮助开发者高效地管理MVC...

    基于SSH实现登录的Demo

    本文将详细讲解如何基于SSH实现登录功能,并构建一个基础的SSH框架。 首先,SSH提供了加密的网络通信,确保了数据在传输过程中的安全性。它通过公钥/私钥对进行身份验证,比传统的用户名/密码方式更为安全。在基于...

    基于SSH三大框架网上商城

    综上所述,"基于SSH三大框架网上商城"项目是一个综合性的实战练习,涵盖了Web开发的多个重要方面,对于学习和理解SSH框架以及电子商务系统的运作模式具有很高的价值。通过实际操作和不断迭代,开发者可以进一步提升...

    SSH框架开发无错模版(Mysql)

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中的经典三位一体架构。这个模版专为无错开发设计,主要用于实现用户登录功能,并且与MySQL数据库进行了集成,提供了完整的建表语句,使得开发者...

    SSH注册登录系统

    SSH注册登录系统是一个基于Java开发的Web应用程序,它利用了三个主流的开源框架:Struts、Hibernate和Spring,这也就是SSH框架...通过这个项目,开发者可以深入理解如何在实际项目中运用SSH框架,提升自己的开发技能。

    SSH框架的购物系统

    SSH框架的购物系统是基于Java技术栈开发的一款电子商务应用程序,主要采用了Spring、Struts和Hibernate三个开源框架。这个系统的设计和实现旨在为用户提供一个安全、高效且用户友好的在线购物平台。 Spring框架作为...

    SSH框架Demo

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个"SSH框架Demo"是一个基于SSH框架构建的登录程序,它包含了一个图片验证功能,对于初学者来说,这是一个很好的实践...

    以ssh为后台框架实现的登录与注册

    SSH框架提供了统一的异常处理机制,可以在全局异常处理器中捕获并处理这些异常,向用户展示友好的错误信息。 8. **测试**:确保登录注册功能正确无误,需要编写单元测试和集成测试。Spring提供MockMVC工具进行控制...

    SSH2框架整合登录例子

    SSH2框架,全称为Struts2、Spring3和Hibernate4的集成,是Java Web开发中的一个经典组合。这个框架集合了MVC(Model-View-Controller)架构模式的Struts2,依赖注入和面向切面编程的Spring,以及对象关系映射的...

Global site tag (gtag.js) - Google Analytics