- 浏览: 578325 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (206)
- Flask (1)
- JavaScript (3)
- Core Java (41)
- XML (1)
- Oracle (11)
- 软件安装及环境配置 (0)
- 其它 (9)
- 面试/笔试 (5)
- 项目 (0)
- JDBC (11)
- Servlet (4)
- MySql (4)
- JNDI (0)
- Hibernate (11)
- Java模式和构架设计 (0)
- Web设计 (22)
- JSP (8)
- Struts (13)
- Tomcat (2)
- Marven (2)
- SVN (2)
- Swing/AWT (1)
- jQuery (2)
- ExtJS (8)
- Python (22)
- Flex (1)
- Django (7)
- 算法 (5)
- English (1)
- Twisted (1)
- Linux (3)
- Rails (1)
- SVG (3)
- PostgreSQL (1)
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;">帐 号:</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;">密 码:</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; } }
发表评论
-
EXT的事件和类
2011-04-17 08:44 11942.11自定义事件Ext.onReady( ... -
ExtJS API或官方例子不能显示问题
2011-04-16 23:12 1297Question: 如果你解压Ext后,直接打 ... -
安装ExtJs的开发工具Spket
2011-04-16 22:48 1130目前开发ExtJs程序最流行的工具是Spket,有较好地提示功 ... -
Ext shouye
2011-04-13 20:36 994<%@ page language="java ... -
Ext增删改查
2011-04-13 07:49 1794<%@ page language="java ... -
Ext 首页布局
2011-04-13 07:45 1710//######### LeftMenu ###### ... -
Ext提交
2011-04-12 01:10 1129/** * 不带验证码的登录框 */ Ext.onR ...
相关推荐
在用户点击获取验证码按钮后,Ext3.0会向服务器发送请求,服务器则返回一张新的验证码图片和其对应的验证码值。 服务器端,这里使用的是Apache Tomcat,这是一个流行的Java Servlet容器,可以处理HTTP请求并生成...
在登录过程中,EXT验证码的目的是防止恶意机器人、自动化脚本或者未经授权的第三方尝试非法访问用户的账号。EXT可能是EXTension的缩写,暗示这可能是一个特定的技术扩展或插件,用于实现这种验证码功能。 EXT验证码...
本篇文章将聚焦于如何使用Ext JavaScript库来实现一个简单的验证码功能。Ext是一个强大的前端开发框架,提供了丰富的UI组件和数据绑定机制,适用于构建复杂的Web应用。 首先,我们需要了解Ext的基本结构。ExtJS基于...
我们可以利用ExtJS的`Ext.util.Random`类生成随机字符串作为验证码,并显示在一个`Ext.field.Text`组件中。同时,还需要一个图片展示验证码图像,这可以通过动态生成并返回图像的服务器端脚本来实现,客户端则使用`...
6. **交互与验证**: 当用户在文本框中输入验证码后,`verifyCaptcha`方法会被调用,比较用户输入的验证码和Store中的验证码,如果匹配则验证成功,否则显示错误消息。 以上就是使用ExtJS MVC实现登录验证码的基本...
文件名"ext4_example_form"可能包含了一个示例代码,展示如何在ExtJS4中创建一个包含登录和验证码功能的表单。这个文件可能包括了JavaScript代码,展示了如何创建表单组件、绑定事件监听器以及如何发送Ajax请求到...
定制化的php验证码类 创建验证码图像: 建立画布(__construct函数) ...设置画布背景($this->set_bgcolor();... 表单页面检测验证码的方法,对比 $_SESSION[an] 是否等于 $_POST[验证码文本框ID]
描述中的"ext4.1简单的登陆界面 包含login.jsp 验证码.jsp"进一步说明了这个登录系统的基本构成。`login.jsp`是JavaServer Pages(JSP)文件,这是一种动态网页技术,用于处理用户登录请求,将用户的输入与服务器端...
将此JAR添加到JMeter的lib/ext目录下,JMeter启动时会自动加载该插件。 4. **JMeter脚本集成**:在JMeter测试计划中,你可以创建一个自定义的Java请求或者使用BeanShell/JSR223等脚本组件,调用刚刚编译好的验证码...
- 可以使用验证码防止自动上传攻击。 6. **代码示例**: 在ASP.NET中,你可以创建一个HttpHandler或Controller处理上传请求,如下: ```csharp public void ProcessRequest(HttpContext context) { if ...
- **安全性考虑**:对于敏感操作如修改密码等,应当增加额外的安全验证措施,例如验证码、双因素认证等。 - **异常处理**:在实际开发中,需要考虑到各种异常情况的发生,并给予恰当的提示信息或错误处理逻辑。 ...
必备VcodeExtractor.jar 包,放进jmeter\lib\ext目录下,重启jmeter 就可以使用了
模拟登录界面,加入验证码,xml树的实现 Ext viewport框架 等好多东西,都是自己在学习ext中想到什么就做个例子,只是有点乱,共同研究共同进步 在javascript目录下加入Ext2.0 在lib下加入所需要的jar 数据库是...
这个类继承自`Ext.form.field.Text`,这意味着它将作为表单字段的一部分,允许用户输入验证码。为了实现验证码功能,我们需要添加一些额外的属性和方法。 在CSS样式方面,定义了两个关键样式来调整验证码输入框和...
3. `ex_directui.ext`:可能是一个扩展文件,可能与`exdui.dll`有关,提供了DirectUI相关的功能,DirectUI是Windows编程中用于创建现代、自定义用户界面的一种技术。 4. `导入格式.txt`:这是一个文本文件,很可能...
5. 验证码与安全防护:为了增加安全性,`ext_auth`可能包含验证码生成器和防止恶意攻击的机制。 使用`ext_auth-0.1.10`库时,开发者首先需要解压下载的`tar.gz`文件,然后按照标准的Python包安装方式进行安装,通常...
在Android应用开发中,短信验证码是一种常见的用户身份验证机制,用于确保用户提供的手机号码真实有效。本篇文章将详细介绍如何利用Mob SDK在Android应用中实现发送短信验证码的功能。 首先,我们需要在Mob官网...
- `set_ext_pixel()`和`set_ext_line()`这两个函数分别用于添加干扰点和干扰线,增强验证码的抗自动识别能力。干扰点是随机出现在图片上的小点,干扰线是随机画出的线条。这两个功能可以通过`$ext_pixel`和`$ext_...
4. **ExtJS组件**:熟悉ExtJS的表单组件,如`Ext.form.Panel`,以及如何使用`Ext.form.field.Text`、`Ext.form.field.Checkbox`等构建登录界面。 5. **前端验证**:使用ExtJS内置的验证功能,对用户输入的数据进行...