`

Ext验证码

阅读更多
package com.hisoft.ems.servlet;

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

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

public class RandomCodeServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	// 验证码图片高度
	private int width = 60;

	// 验证码图片宽度
	private int height = 20;

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {

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

		Graphics2D g = buffImg.createGraphics();

		// 设置白色背景
		g.setColor(Color.WHITE);
		g.fillRect(0, 0, width, height);

		// 创建字体,字体的大小应该根据图片的高度来确定
		Font font = new Font("Times New Roman", Font.PLAIN, 18);
		g.setFont(font);

		// 画边框
		g.setColor(Color.black);
		g.drawRect(0, 0, height - 1, height - 1);

		// 创建一个随机数生成器
		Random random = new Random();

		// 随机产生160条干扰线,使图像中的验证码不易被其他程序探测到
		g.setColor(Color.gray);
		for (int i = 0; i < 160; i++) {
			int x = random.nextInt(width);
			int y = random.nextInt(height);
			int x1 = random.nextInt(12);
			int y1 = random.nextInt(12);
			g.drawLine(x, y, x + x1, y + y1);
		}

		// randomCode用于保存随机产生的验证码,以便于用户登录后进行验证。
		StringBuffer randomCode = new StringBuffer();
		int red = 0, green = 0, blue = 0;

		// 随机产生4位数字的验证码
		for (int i = 0; i < 4; i++) {

			// 随机得到产生的验证码数字
			String strRand = String.valueOf(random.nextInt(10));
			// 随机获得验证码字符,包括0~9,a~z,A~Z
			// String strRand = this.getRandomChar();

			// 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
			red = random.nextInt(110);
			green = random.nextInt(5);
			blue = random.nextInt(50);

			// 用随机产生的颜色将验证码绘制到图像中
			g.setColor(new Color(red, green, blue));
			g.drawString(strRand, 13 * i + 6, 16);

			// 将4位随机数组合在一起。
			randomCode.append(strRand);
		}

		// 将4位数字的验证码保存在Session中。
		HttpSession session = req.getSession();
		session.setAttribute("randomCode", randomCode.toString());

		// 禁止图像缓存。
		resp.setHeader("Pragma", "no-cache");
		resp.setHeader("Cache-Control", "no-cache");
		resp.setDateHeader("Expires", 0);

		// 将图像输出到Servlet输出流中。
		resp.setContentType("image/jpeg");
		ServletOutputStream sos = resp.getOutputStream();
		ImageIO.write(buffImg, "jpeg", sos);
		sos.close();
	}

	// 随机获得字符,包括数字0~9,a~z,A~Z
	public String getRandomChar() {
		Random random = new Random();
		ArrayList<String> list = new ArrayList<String>();
		for (int i = 0; i < 10; i++) {// 0-9
			list.add(String.valueOf(48 + i));
		}
		for (int i = 0; i < 26; i++) {// A-Z
			list.add(String.valueOf(65 + i));
		}
		for (int i = 0; i < 26; i++) {// a-z
			list.add(String.valueOf(97 + i));
		}
		int index = random.nextInt(list.size());
		return list.get(index);
	}

}

 

 

/**
 * 不带验证码的登录框
 */
Ext.onReady(function() {

	// 使用表单提示
	Ext.QuickTips.init();

	// turn on validation errors beside the field globally
	Ext.form.Field.prototype.msgTarget = "side";

	// 定义一个输入表单
	var simple = new Ext.FormPanel({
		baseCls : "x-plain",
		defaultType : "textfield",
		buttonAlign : 'center',
		layout:'table',
        layoutConfig: {columns:3},
		items : [{
					xtype : 'label',
					html : '<span style="font-size:12px;line-height:30px;">帐&nbsp;&nbsp;&nbsp;号:</span>',
					width: 45,
					colspan:1
				},{
					name : "user.loginName",
					allowBlank : false,
					blankText : "帐号不能为空",
					width : 160,
					colspan: 2
				},{
					xtype : 'label',
					html : '<span style="font-size:12px;line-height:30px;">密&nbsp;&nbsp;&nbsp;码:</span>',
					width: 45,
					colspan:1
				}, {
					inputType : "password",
					name : "user.password",
					allowBlank : false,
					blankText : "密码不能为空",
					width : 160,
					colspan:2
				},{
					xtype : 'label',
					html : '<span style="font-size:12px;line-height:30px;">验证码:</span>',
					width: 45,
					colspan:1
				}, {
					name : "user.loginName",
					allowBlank : false,
					blankText : "验证码不能为空",
					width : 50,
					colspan:1
				}, {
					xtype : 'panel',
					html : '<a href="login.jsp"><img src="imgcode" alt="看不清?点击换一个"/></a>',
					colspan:1,
					width:60
				}],
		buttons : [{
			width : 50,
			text : "<span style='font-size:12px;'>登录</span>",
			type : "submit",
			handler : function() {
				if (simple.form.isValid()) {
					Ext.MessageBox.show({
								title : "请稍等",
								msg : "正在加载.....",
								progressText : "",
								width : 300,
								progress : true,
								closable : false,
								animEl : "loding"
							});
					var f = function(v) {
						return function() {
							var i = v / 11;
							Ext.MessageBox.updateProgress(i, '');
						}
					}
					for (var i = 1; i < 13; i++) {
						setTimeout(f(i), i * 150);
					}
					// 提交到服务器操作
					simple.form.doAction("submit", {
								url : "Login.action",
								method : "post",
								params : "",
								success : function(form, action) {
									document.location = 'index.jsp';
									Ext.Msg.alert("登录成功!",
											action.result.message);
								},
								failure : function(form, action) {
									Ext.Msg
											.alert('登陆失败',
													action.result.message);
								}
							});
				}
			}
		}, {
			width : 50,
			text : "<span style='font-size:12px;'>重置</span>",
			handler : function() {
				// 重置表单
				simple.form.reset();
			}
		}]
	});
	// 定义窗体
	var _window = new Ext.Window({
				title : "<span style='font-size:14px;'>用户登录</span>",
				layout : "fit",
				width : 250,
				height : 170,
				plain : true,
				bodyStyle : "padding:10px;padding-bottom:0px;",
				maximizable : false,
				resizable : false,
				closeAction : "close",
				closable : false,
				collapsible : true,
				plain : true,
				buttonAlign : "center",
				items : simple
			});
	_window.show()
});

 

 

package com.hisoft.ems.action;

import com.hisoft.ems.model.User;
import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {

	private static final long serialVersionUID = 1L;

	private boolean success;

	private String message;

	private User user;

	public String login() {
		if ("admin".equals(user.getLoginName().trim())
				&& "admin".equals(user.getPassword().trim())) {
			this.success = true;
			this.message = "您的帐号是"+user.getLoginName()+",密码是"+user.getPassword();
		} else {
			this.success = false;
			this.message = "对不起,未授权用户不能使用本系统";
		}
		return SUCCESS;
	}

	public boolean isSuccess() {
		return success;
	}

	public void setSuccess(boolean success) {
		this.success = success;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

}

 

分享到:
评论

相关推荐

    Ext3.0 实现验证码

    在用户点击获取验证码按钮后,Ext3.0会向服务器发送请求,服务器则返回一张新的验证码图片和其对应的验证码值。 服务器端,这里使用的是Apache Tomcat,这是一个流行的Java Servlet容器,可以处理HTTP请求并生成...

    EXT登陆验证码

    在登录过程中,EXT验证码的目的是防止恶意机器人、自动化脚本或者未经授权的第三方尝试非法访问用户的账号。EXT可能是EXTension的缩写,暗示这可能是一个特定的技术扩展或插件,用于实现这种验证码功能。 EXT验证码...

    Ext实现验证码的关键代码

    本篇文章将聚焦于如何使用Ext JavaScript库来实现一个简单的验证码功能。Ext是一个强大的前端开发框架,提供了丰富的UI组件和数据绑定机制,适用于构建复杂的Web应用。 首先,我们需要了解Ext的基本结构。ExtJS基于...

    extjs 登陆页面+验证码

    我们可以利用ExtJS的`Ext.util.Random`类生成随机字符串作为验证码,并显示在一个`Ext.field.Text`组件中。同时,还需要一个图片展示验证码图像,这可以通过动态生成并返回图像的服务器端脚本来实现,客户端则使用`...

    ExtJS登入验证码的实现

    6. **交互与验证**: 当用户在文本框中输入验证码后,`verifyCaptcha`方法会被调用,比较用户输入的验证码和Store中的验证码,如果匹配则验证成功,否则显示错误消息。 以上就是使用ExtJS MVC实现登录验证码的基本...

    Extjs4登录功能+验证码+struts2

    文件名"ext4_example_form"可能包含了一个示例代码,展示如何在ExtJS4中创建一个包含登录和验证码功能的表单。这个文件可能包括了JavaScript代码,展示了如何创建表单组件、绑定事件监听器以及如何发送Ajax请求到...

    定制化的php验证码类.zip

    定制化的php验证码类 创建验证码图像:  建立画布(__construct函数)  ...设置画布背景($this-&gt;set_bgcolor();... 表单页面检测验证码的方法,对比 $_SESSION[an] 是否等于 $_POST[验证码文本框ID] 

    ext4.1登陆界面

    描述中的"ext4.1简单的登陆界面 包含login.jsp 验证码.jsp"进一步说明了这个登录系统的基本构成。`login.jsp`是JavaServer Pages(JSP)文件,这是一种动态网页技术,用于处理用户登录请求,将用户的输入与服务器端...

    jmeter 验证码

    将此JAR添加到JMeter的lib/ext目录下,JMeter启动时会自动加载该插件。 4. **JMeter脚本集成**:在JMeter测试计划中,你可以创建一个自定义的Java请求或者使用BeanShell/JSR223等脚本组件,调用刚刚编译好的验证码...

    asp.net+ext上传图片并显示

    - 可以使用验证码防止自动上传攻击。 6. **代码示例**: 在ASP.NET中,你可以创建一个HttpHandler或Controller处理上传请求,如下: ```csharp public void ProcessRequest(HttpContext context) { if ...

    EXT异步提交FORM表单

    - **安全性考虑**:对于敏感操作如修改密码等,应当增加额外的安全验证措施,例如验证码、双因素认证等。 - **异常处理**:在实际开发中,需要考虑到各种异常情况的发生,并给予恰当的提示信息或错误处理逻辑。 ...

    jmeter 获取验证码实现有验证码登录接口测试 必备VcodeExtractor.jar 包

    必备VcodeExtractor.jar 包,放进jmeter\lib\ext目录下,重启jmeter 就可以使用了

    SSH和Ext整合 更新

    模拟登录界面,加入验证码,xml树的实现 Ext viewport框架 等好多东西,都是自己在学习ext中想到什么就做个例子,只是有点乱,共同研究共同进步 在javascript目录下加入Ext2.0 在lib下加入所需要的jar 数据库是...

    验证码的实现

    这个类继承自`Ext.form.field.Text`,这意味着它将作为表单字段的一部分,允许用户输入验证码。为了实现验证码功能,我们需要添加一些额外的属性和方法。 在CSS样式方面,定义了两个关键样式来调整验证码输入框和...

    163邮箱批量登录 免验证码

    3. `ex_directui.ext`:可能是一个扩展文件,可能与`exdui.dll`有关,提供了DirectUI相关的功能,DirectUI是Windows编程中用于创建现代、自定义用户界面的一种技术。 4. `导入格式.txt`:这是一个文本文件,很可能...

    Python库 | ext_auth-0.1.10.tar.gz

    5. 验证码与安全防护:为了增加安全性,`ext_auth`可能包含验证码生成器和防止恶意攻击的机制。 使用`ext_auth-0.1.10`库时,开发者首先需要解压下载的`tar.gz`文件,然后按照标准的Python包安装方式进行安装,通常...

    Android用 Mob 实现发送短信验证码实例

    在Android应用开发中,短信验证码是一种常见的用户身份验证机制,用于确保用户提供的手机号码真实有效。本篇文章将详细介绍如何利用Mob SDK在Android应用中实现发送短信验证码的功能。 首先,我们需要在Mob官网...

    PHP验证码类代码( 最新修改,完全定制化! )

    - `set_ext_pixel()`和`set_ext_line()`这两个函数分别用于添加干扰点和干扰线,增强验证码的抗自动识别能力。干扰点是随机出现在图片上的小点,干扰线是随机画出的线条。这两个功能可以通过`$ext_pixel`和`$ext_...

    ssh+extjs全注解登陆实现,包含验证码和记住用户名等

    4. **ExtJS组件**:熟悉ExtJS的表单组件,如`Ext.form.Panel`,以及如何使用`Ext.form.field.Text`、`Ext.form.field.Checkbox`等构建登录界面。 5. **前端验证**:使用ExtJS内置的验证功能,对用户输入的数据进行...

Global site tag (gtag.js) - Google Analytics