- 浏览: 700362 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (362)
- java基础 (33)
- html/css+div/javascript (17)
- Ajax/XML/JSON/XSL (7)
- JQuery (11)
- Extjs (1)
- JSP/Servlet (19)
- MVC模式 (4)
- struts 1 (17)
- Struts 2.3.4 (17)
- Spring 3.2 (26)
- Springmvc (3)
- Hibernate 4.1 (21)
- ibatis (6)
- Velocity模板语言 (2)
- Rose框架 (5)
- EJB (1)
- JUnit测试 (2)
- 数据库DB (24)
- 重构 / 设计模式 (3)
- 开发工具IDE (37)
- 数据结构与算法设计 (3)
- Android (12)
- Linux (4)
- bug集合 (29)
- 缓存技术(redis) (3)
- Lucene全文索引 (15)
- maven3.0.5 (4)
- 小工具集合 (18)
- 面试题 (5)
- 闲聊 (11)
- 其他 (4)
- 接口API (2)
- work (2)
- Flex (0)
- JMS (1)
- 开源项目集合 (1)
- 技术博客 (1)
- 分类04 (0)
- 分类05555 (0)
最新评论
-
小小小羊:
好屌...
java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$Refle -
liubinli2005:
这个可以脱底spring。单独使用吗?
DAO层:jade -
cangbaotu:
我觉得对于开发者来说,能脚本化编写爬虫是一件挺开心的事情( ̄▽ ...
网页爬取 -
asjava:
很好的文章, 但每段代码清单都重复了一次.
spring 事务 -
xia635317478:
<div class="quote_title ...
登陆验证码(struts2实现)
登陆验证码(struts2实现)
1.login.jsp
2.web.xml
3.struts.xml
4.RandomNumUtil.java
5.RandomAction.java和LoginAction.java
放session中只是为了点登录之后判断是否正确,struts.xml配置好了就可以传过去了
1.login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <%@ taglib prefix ="s" uri="/struts-tags"%> <html> <head> <script type="text/javascript"> function changeValidateCode(obj) { /*** * 获取当前的时间作为参数,无具体意义 * 每次请求需要一个不同的参数,否则可能会返回同样的验证码 * 这和浏览器的缓存机制有关系,也可以把页面设置为不缓存,这样就不用这个参数了。 */ var timenow = new Date().getTime(); obj.src="randPic.action?d="+timenow; } </script> </head> <body> <form name="" action="Login"> 验证码:<s:textfield name="code"></s:textfield><img src="randPic.action" onclick="changeValidateCode(this)" title="点击图片刷新验证码"/> <br/><input type="submit" value="登陆"/><input type="reset" value="重置"/> </form> </body> </html>
2.web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
3.struts.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="iamge" extends="struts-default" namespace="/"> <action name="randPic" class="com.org.momo.action.RandomAction"> <result type="stream"> <param name="contentType">image/jpeg</param> <param name="inputName">inputStream</param> </result> </action> <action name="Login" class="com.org.momo.action.LoginAction"> <result name="success">/success.jsp</result> <result name="error">/fail.jsp</result> </action> </package> </struts>
4.RandomNumUtil.java
package com.org.momo.util ; 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.Random; import javax.imageio.ImageIO; import javax.imageio.stream.ImageOutputStream; public class RandomNumUtil { private ByteArrayInputStream image;//图像 private String str;//验证码 private RandomNumUtil(){ init();//初始化属性 } /* * 取得RandomNumUtil实例 */ public static RandomNumUtil Instance(){ return new RandomNumUtil(); } /* * 取得验证码图片 */ public ByteArrayInputStream getImage(){ return this.image; } /* * 取得图片的验证码 */ public String getString(){ return this.str; } private void init() { // 在内存中创建图象 int width=85, height=20; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 获取图形上下文 Graphics g = image.getGraphics(); // 生成随机类 Random random = new Random(); // 设定背景色 g.setColor(getRandColor(200,250)); g.fillRect(0, 0, width, height); // 设定字体 g.setFont(new Font("Times New Roman",Font.PLAIN,18)); // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到 g.setColor(getRandColor(160,200)); for (int i=0;i<155;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); } // 取随机产生的认证码(6位数字) String sRand=""; for (int i=0;i<4;i++){ String rand=String.valueOf(random.nextInt(10)); sRand+=rand; // 将认证码显示到图象中 g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110))); // 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成 g.drawString(rand,13*i+6,16); } //赋值验证码 this.str=sRand; //图象生效 g.dispose(); ByteArrayInputStream input=null; ByteArrayOutputStream output = new ByteArrayOutputStream(); try{ ImageOutputStream imageOut = ImageIO.createImageOutputStream(output); ImageIO.write(image, "JPEG", imageOut); imageOut.close(); input = new ByteArrayInputStream(output.toByteArray()); }catch(Exception e){ System.out.println("验证码图片产生出现错误:"+e.toString()); } this.image=input;/* 赋值图像 */ } /* * 给定范围获得随机颜色 */ 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); } }
5.RandomAction.java和LoginAction.java
package com.org.momo.action ; import java.io.ByteArrayInputStream; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.org.momo.util.RandomNumUtil; public class RandomAction extends ActionSupport{ private ByteArrayInputStream inputStream; public String execute() throws Exception{ RandomNumUtil rdnu=RandomNumUtil.Instance(); this.setInputStream(rdnu.getImage());//取得带有随机字符串的图片 ActionContext.getContext().getSession().put("sessionCode", rdnu.getString());//取得随机字符串放入HttpSession return SUCCESS; } public void setInputStream(ByteArrayInputStream inputStream) { this.inputStream = inputStream; } public ByteArrayInputStream getInputStream() { return inputStream; } } package com.org.momo.action; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport{ private String code; public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String execute() throws Exception{ String sessionCode=(String)(ActionContext.getContext().getSession().get("sessionCode")); if(sessionCode.equals(this.getCode())) { return SUCCESS; }else{ return ERROR; } } }
评论
2 楼
xia635317478
2015-07-28
jethypc 写道
验证码的session无法传过去啊 还是我的设置有什么问题吗
放session中只是为了点登录之后判断是否正确,struts.xml配置好了就可以传过去了
1 楼
jethypc
2014-06-18
验证码的session无法传过去啊 还是我的设置有什么问题吗
发表评论
-
网页爬取
2013-09-05 13:10 1065网页爬取 参考: 1.http://www.csdnjava ... -
浏览器插件集合(火狐+谷歌)
2013-07-03 10:26 1161Change Host 引用c:\windows\syste ... -
【32位和64位不同的操作系统】环境的配置
2013-07-02 13:34 1202【32位和64位不同的操作 ... -
跨域共享Cookies
2013-06-29 22:23 12397跨域共享Cookies 正常的cookie只能在一个应用中 ... -
代码托管Eclipse插件--Egit使用(GitHub)
2013-06-09 00:09 4868代码托管Eclipse插件--Egit使用(GitHub) ... -
FindBugs简介
2013-05-14 16:18 1328FindBugs简介 一、介绍 FindBugs 是一个静态 ... -
常用Java代码质量检测评估工具
2013-05-14 16:07 8389常用Java代码质量检测评估工具 1. PMD fro ... -
乱码解决
2013-05-09 16:31 1005乱码解决 1.超链接发送参数: 发送的时候使用URLEnc ... -
JAVA操作Excel
2013-05-05 15:02 958JAVA操作Excel JAVA 通常有两种方法来操作Ex ... -
JavaMail邮件发送Demo
2012-12-26 11:37 3086JavaMail邮件发送Demo import com ... -
上传功能的实现(Struts2)
2012-10-12 09:18 1149上传功能的实现(Struts2) 在WebRoot根目录新建 ... -
简单的下载功能实现(struts2)
2012-09-14 22:36 1061简单的下载功能实现(struts2)1.前台页面: & ... -
登陆验证码(Servlet实现)
2012-09-14 22:27 7424登陆验证码(Servlet实现) 1.前台登陆界面: &l ... -
分页显示 (SSH实现+Ajax读取json)
2012-09-14 21:38 9699数据分页显示(SSH实现+Ajax读取json) 1.bea ... -
数据加密 md5_03
2012-09-06 22:20 1072import java.security.*; publ ... -
数据加密MD5_02
2012-09-06 22:19 995import java.security.*; imp ... -
数据加密MD5_01
2012-09-06 22:14 1094package com.chuanxi.training. ...
相关推荐
通过struts2实现验证码登录,验证码可以点击更换 ,包含用户名密码校验
完整的Struts2框架,联系oracle数据库实现登录验证 验证码功能:点击图片切换验证码,验证码错误提示 登录成功后变量session中的list集合 内含备注
开发环境: eclipse Kepler JEE IDE + Tomcat v6.0 + Struts-2.3.15(最新版) 步骤: 1. 下载后解压,import to eclipse as a project. 2. 启动 Tomcat v6.0 3. 打开...
struts2+spring整合登陆验证经典完整案例!期余JAR文件在struts2+spring整合登陆验证经典完整案例!(JAR)这个中,免积分下载! 部署Web应用请按如下步骤进行: 1. 进入reg_login路径下,将mysql.sql脚本中的语句...
- 为了防止跨站请求伪造(CSRF),可以考虑在请求头添加验证码或者使用Struts2的CSRF插件。 通过以上步骤,我们可以将EXTJS的美观界面和Struts2的强大后台逻辑结合,实现一个完整的登录功能。这种整合方式在实际...
struts2+hibernate3+spring3+mysql+验证码实现登陆
首先,在项目中添加Struts2的相关依赖,并配置`struts2-convention-plugin`,这样可以自动根据类和方法的名字生成Action和结果页面。创建一个`LoginAction`类,实现用户的登录逻辑,包括从请求中获取用户名和密码,...
在这个"验证码登陆(SSH初级整合)"的项目中,我们将探讨如何将这三个框架结合在一起,实现一个带有验证码功能的登录系统。 1. Spring框架:Spring作为核心的依赖注入(DI)和面向切面编程(AOP)框架,负责管理和...
在本实例中,“adajx_struts2登陆框”着重展示了如何利用Struts2框架与AJAX技术结合,创建一个动态、交互式的登录界面。 首先,我们需要理解Struts2的核心概念。Struts2框架通过Action类处理用户请求,并返回相应的...
总的来说,"struts2登录"项目是一个典型的Web应用程序入门示例,它涵盖了Struts2框架的基础使用,以及登录功能实现的关键步骤。通过学习和实践这个项目,开发者可以深入理解Struts2的工作原理,并为构建更复杂的Java...
`Struts2`的配置文件`struts.xml`中需要定义这个`Action`,指定其执行方法和对应的视图。 ```xml <package name="default" namespace="/" extends="struts-default"> <result name="success">/success.jsp ...
Struts2+Spring+Hibernate是Java Web开发中的经典组合,常被称为SSH框架。这个组合提供了模型-视图-控制器(MVC)架构模式,用于构建高效、可维护的Web应用程序,特别是登录和注册模块。接下来,我们将深入探讨这些...
在这个“登陆验证码”项目中,开发者已经封装了一个方便使用的验证码生成器,适用于基于Spring Boot(SSM:Spring、Spring MVC、MyBatis)的系统。如果需要在SSH(Spring、Struts、Hibernate)框架下使用,只需稍作...
这个"struts2登录实例"旨在展示如何利用Struts2实现一个基本的用户登录功能。下面我们将深入探讨Struts2的核心概念以及如何构建一个简单的登录系统。 1. **Struts2框架基础** - **Action类**:在Struts2中,Action...
本项目"login_struts"旨在演示如何利用Struts2框架实现一个简单的登录功能。以下将详细介绍Struts2框架的核心概念、登录实现过程以及相关的知识点。 首先,Struts2框架是Apache软件基金会的产品,它在原有的Struts1...
在这个"Struts2.0登陆案例"中,我们将深入探讨如何在MyEclipse6.0集成开发环境下,利用Struts2.0.11版本实现一个基础的用户登录功能。 首先,了解Struts2的核心组件和工作原理至关重要。Struts2框架的核心包括...
4. **拦截器(Interceptors)**:Struts2的拦截器是处理请求前后的关键组件,可以实现如日志、权限验证等功能。在登录注册示例中,可能会有用于验证用户输入的拦截器。 5. **JSP和 Tiles**:在视图层,Struts2通常...