`
conkeyn
  • 浏览: 1524817 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

用户登陆,退出等基本Action(1) 验证码

阅读更多

首先需要一个验证码生成的工具类(ConfirmCodeGen.java):

package com.tools;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

/**
 * 生成验证码
 * 
 * @author Michael Young
 * 
 */
public final class ConfirmCodeGen {

	/**
	 * @param response
	 * @param width
	 * @param height
	 * @param len
	 * @return
	 * @throws Exception
	 */
	public static String genImageCode(HttpServletResponse response, int width,
			int height, int len) throws Exception {
		// random number
		String code = Integer.toString((int) (Math.random() * (1E4)));
		for (int i = code.length(); i < len; i++)
			code += "0";
		response.setContentType("image/jpeg");
		response.addHeader("pragma", "NO-cache");
		response.addHeader("Cache-Control", "no-cache");
		response.addDateHeader("Expries", 0);
		BufferedImage image = new BufferedImage(width, height,
				BufferedImage.TYPE_INT_RGB);
		Graphics g = image.getGraphics();
		// 以下填充背景颜色
		g.setColor(Color.WHITE);
		g.fillRect(0, 0, width, height);
		// 画边框
		g.setColor(Color.black);
		g.drawRect(0, 0, width - 1, height - 1);
		// 设置字体颜色
		g.setColor(Color.BLACK);
		// g.setColor(new Color());
		g.setFont(new Font("Times New Roman", Font.BOLD, 16));
		g.drawString(code, 5, 15);
		// 88点
		Random random = new Random();
		for (int i = 0; i < 66; i++) {
			int x = random.nextInt(width);
			int y = random.nextInt(height);
			g.setColor(new Color((int) Math.floor(Math.random() * 255)));
			g.drawLine(x, y, x, y);
		}
		g.dispose();
		ServletOutputStream outStream = response.getOutputStream();
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outStream);
		encoder.encode(image);
		outStream.flush();
		outStream.close();
		return code;
	}

	/**
	 * @param session
	 * @param confirmCode
	 * @return
	 */
	public static boolean isCorrectCode(HttpServletRequest request) {
		HttpSession session = request.getSession();
		String confirmCode = request.getParameter("confirmCode");
		if (session.getAttribute("confirmcode") == null || confirmCode == null) {
			return false;
		}
		String code = (String) session.getAttribute("confirmcode");
		// 移除Session
		session.removeAttribute("confirmcode");
		if (code.equals(confirmCode)) {
			return true;
		}
		return false;
	}

	/**
	 * 从ajax判断验证码的正确与否
	 * 
	 * @param confirmCode
	 *            验证码
	 * @param session
	 * @return
	 */
	public static Byte isCorrectCodeFromSession(String confirmCode,
			HttpSession session) {
		if (session.getAttribute("confirmcode") == null || confirmCode == null) {
			return 0;
		}
		String code = (String) session.getAttribute("confirmcode");
		if (code.equals(confirmCode)) {
			return 1;
		}
		// 移除Session
		session.removeAttribute("confirmcode");
		return 0;

	}
}

  2、需要一个自定义的Action的result,(ConfirmCodeGenResult.java):

/**
 * 
 */
package com.web.struts.results;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.StrutsResultSupport;

import com.opensymphony.xwork2.ActionInvocation;
import com.tools.ConfirmCodeGen;

/**
 * title: 生成的验证码的Result
 * 
 * @author conkeyn
 * @时间 2009-4-14:下午02:31:52
 */
public class ConfirmCodeGenResult extends StrutsResultSupport {

	/**  */
	private static final long serialVersionUID = 2545890371747338210L;

	/** 随机图片宽度 */
	private int c_width;

	/** 随机图片高度 */
	private int c_height;

	/** 随机数长度 */
	private int c_length;

	@Override
	protected void doExecute(String finalLocation, ActionInvocation invocation)
			throws Exception {
		HttpServletResponse response = ServletActionContext.getResponse();
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpSession session = request.getSession();
		Object widthO = invocation.getStack().findValue("c_width");
		if (widthO != null) {
			c_width = (Integer) widthO;
			if (c_width <= 0) {
				c_width = 45;
			}
		} else {
			c_width = 45;
		}
		Object heightO = invocation.getStack().findValue("c_height");
		if (heightO != null) {
			c_height = (Integer) heightO;
			if (c_height <= 0) {
				c_height = 20;
			}
		} else {
			c_height = 20;
		}
		Object c_lengthO = invocation.getStack().findValue("c_length");
		if (c_lengthO != null) {
			c_length = (Integer) c_lengthO;
			if (c_length <= 0) {
				c_length = 4;
			}
		} else {
			c_length = 4;
		}
		String random = ConfirmCodeGen.genImageCode(response, c_width,
				c_height, c_length);

		session.setAttribute("confirmcode", random);
	}

	public int getC_width() {
		return c_width;
	}

	public void setC_width(int c_width) {
		this.c_width = c_width;
	}

	public int getC_height() {
		return c_height;
	}

	public void setC_height(int c_height) {
		this.c_height = c_height;
	}

	public int getC_length() {
		return c_length;
	}

	public void setC_length(int c_length) {
		this.c_length = c_length;
	}

}

 3、需要一个默认的action():

package com.web.struts.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

/**
 * 基本Action
 * 
 * 
 * 
 */
public class base extends ActionSupport {
	/**
	 * 
	 */
	private static final long serialVersionUID = -7546749187705748430L;

	/** 验证码的随机图片宽度 */
	protected int c_width;

	/** 验证码的随机图片高度 */
	protected int c_height;

	/** 验证码的随机数长度 */
	protected int c_length;

	public String execute() throws Exception {
		return SUCCESS;
	}


	/**
	 * Convenience method to get the request
	 * 
	 * @return current request
	 */
	protected HttpServletRequest getRequest() {
		return ServletActionContext.getRequest();
	}


	/**
	 * Convenience method to get the response
	 * 
	 * @return current response
	 */
	protected HttpServletResponse getResponse() {
		return ServletActionContext.getResponse();
	}

	/**
	 * Convenience method to get the session
	 */
	protected HttpSession getSession() {
		return getRequest().getSession();
	}

	
	public int getC_width() {
		return c_width;
	}

	public void setC_width(int c_width) {
		this.c_width = c_width;
	}

	public int getC_height() {
		return c_height;
	}

	public void setC_height(int c_height) {
		this.c_height = c_height;
	}

	public int getC_length() {
		return c_length;
	}

	public void setC_length(int c_length) {
		this.c_length = c_length;
	}
}

 配置文件(struts-validation.xml):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" >
<struts>
	<package name="map_validation" extends="struts-default" namespace="/validation">
		<result-types>
			<result-type name="confirmCodeGenResult"
				class="com.web.struts.results.ConfirmCodeGenResult" />
		</result-types>
		<action name="confirm" class="baseAction">
			<result type="confirmCodeGenResult"></result>
		</action>
	</package>
</struts>
 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    基于用户登陆的struts2中action的分类实例

    综上所述,基于用户登录的Struts2 Action设计涉及到用户认证、权限控制、异常处理等多个方面。通过合理的分类和设计,可以构建出稳定、安全且用户体验良好的Web应用。在实践中,开发者应不断学习和掌握Struts2的特性...

    Yii框架实现的验证码、登录及退出功能示例

    总结来说,这个实例展示了Yii框架中实现验证码、登录和退出功能的基本步骤: 1. 定义模型类 `Auth` 用于处理用户数据。 2. 创建表单模型类 `IndexForm`,处理用户输入并进行验证。 3. 在控制器 `IndexController` ...

    JSP实现用户登录、注册和退出功能

    在本文中,我们将探讨如何使用Java Server Pages(JSP)技术实现用户登录、注册和退出功能。这些功能是任何Web应用程序的基础部分,尤其对于需要用户身份验证的系统而言至关重要。我们将按照以下步骤进行介绍: 1. ...

    第4章注册、登录和注销.pptx

    总结来说,注册、登录和注销是Web应用的基本需求,它们涉及到前端界面设计、后端业务逻辑实现、数据库操作以及会话管理等多个方面。通过理解DAO模式、Hibernate、Struts 2等技术,开发者可以构建出高效、稳定的用户...

    jsp获取action传来的session和session清空以及判断.docx

    * 实现用户登录、注册和退出功能 * 实现简洁登录界面 * 实现系统登录后的退出原理 * 实现网站的登录与注册小案例 * 实现登录功能之添加验证码 * 实现生成登录验证码 等等。Session的使用可以提高jsp应用程序的灵活...

    PHP登陆系统 源码 下载 很实用

    在实际开发中,应该考虑使用验证码、HTTPS加密通信以及限制登录尝试次数等额外的安全措施。 以上就是这个PHP登录系统源码中涉及的核心知识点。虽然它提供了一个基本的框架,但在实际项目中,我们需要进一步完善和...

    登陆模块jsp代码,挺不错呀

    这样,用户在网站内的其他操作无需重复登录,直到会话过期或用户主动退出。 6. **数据库连接**:验证用户通常需要与数据库进行交互,查询用户账户信息。在JSP中,可以使用Java的JDBC API连接到数据库,执行SQL查询...

    仿世纪佳缘婚介交友系统5.3 ASP+SQL

     (1)基本设置:有模板缓存开关、系统定时开关等项,这里[缓存模板句柄]比较重要。如果IIS可以创建独立应用池,那么这里的缓存模板句柄可以自己加入其它模板名,提高程序运行速度!例如:日记模板名为:diary...

    多多校园论坛,很经典很强大

    【后台登录】而后台帐号的用户和密码都可以更改,在右侧的管理菜单中进行更改,而且管理帐号只有一个,它不是会员,没有基本信息; 会员要是认证以上等级,右边的[管理留言]才会显示,请注意这里的区别,操作方法:...

    WebQQ最新登陆协议的用法

    WebQQ的最新登陆协议是QQ在线服务的一种技术...发起的GET请求类似于`https://ssl.ptlogin2.qq.com:443/login?u=您的QQ号码&p=加密后的密码&verifycode=验证码&webqq_type=40&remember_uin=1&login2qq=1&aid=1003903&u1=...

    基于Android手机系统的java短信收发程序

    这个基于Android的Java短信收发程序允许用户不仅发送短信,还能接收到短信通知,这在很多应用场景中都非常实用,如验证码发送、紧急通知等。下面将详细探讨相关知识点。 1. **Android SDK**:开发Android应用的基础...

    test_login

    测试登录功能时,我们通常会编写单元测试、集成测试和端到端测试,确保用户能够正确地登录和退出,同时处理各种异常情况,如无效的用户名或密码、验证码错误等。 总结来说,“test_login”项目涵盖了HTML页面设计、...

    Django框架使用内置方法实现登录功能详解

    在本篇文章中,我们将深入探讨如何利用Django框架内置的方法来实现用户登录功能。通过详细分析Django框架内置方法实现登录功能的操作技巧及注意事项,帮助开发者更好地理解和应用这些功能。 #### 一、内置登录退出...

    SMSListener.rar_SMSListener_android_android SMSListener_android

    在`onReceive()`方法中,你可以获取到短信的相关信息,如发件人、短信内容等。通过`Intent`的`extras`可以获取到`pdus`数组,这是一个包含短信数据的二进制数组。使用`SmsMessage`类的静态方法`createFromPdu()`解析...

    .NET万能框架:Masuit.Tools

    加密安全:对字符串进行的扩展,包含AES、DES、MD5、hash、SHA1、加盐等; 字符串扩展:包含验证码生成、各种与字符串相关的扩展; Win32API:包含于Windows系统接口相关的操作封装; 全局扩展:包含字符串扩展,...

    python入门到高级全栈工程师培训 第3期 附课件代码

    第1章 01 计算机发展史 02 计算机系统 03 小结 04 数据的概念 05 进制转换 06 原码补码反码 07 物理层和数据链路层 08 网络层和arp协议 09 传输层和应用层 第2章 01 上节课复习 02 arp协议复习 03 字符编码 第3...

    destoon会员注册提示“数据校验失败(2)”解决方法

    1. 登录Destoon后台管理界面。 2. 进入后台管理的模块管理功能区。 3. 选择并编辑会员注册模块的相关文件,即module/member/register.inc.php。 在register.inc.php文件中,找到以下两段代码: ```php if($action!=...

    SMS.rar_android

    描述中的“自动推出Activity”指的是当特定短信被检测到时,应用可以主动关闭当前运行的Activity,以实现特定业务逻辑或保护用户隐私。 首先,我们来深入理解Android系统中如何处理短信: 1. **权限声明**:在...

Global site tag (gtag.js) - Google Analytics