- 浏览: 1522228 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (516)
- Java (49)
- Java/Struts 2.0 (25)
- Java/Spring、Spring MVC (11)
- Java/Quartz (3)
- Java/Lucene (6)
- Java/Hibernate (19)
- Java/openJPA (7)
- Java/DWR (7)
- Java/Security、Spring Security/OAuth2 (6)
- Java/Threading (9)
- Java/XML (22)
- java/design pattern (4)
- Android (2)
- JavaScript (46)
- jquery (3)
- DB/MySQL (23)
- DB/Oracle (16)
- PHP (25)
- CSS (20)
- Linux (38)
- C/C++、DLL、Makefile、VC++ (31)
- 正则 (9)
- Eclipse (4)
- 安全、网络等概念 (25)
- 集群 (7)
- 网页 (5)
- 视频\音频 (1)
- HTML (6)
- 计算机数学/算法 (3)
- Virtualbox (1)
- LDAP (2)
- 数据挖掘 (6)
- 工具破解 (1)
- 其他 (13)
- Mail (1)
- 药材 (3)
- 游戏 (2)
- hadoop (13)
- 压力测试 (3)
- 设计模式 (3)
- java/Swing (2)
- 缓存/Memcache (0)
- 缓存/Redis (1)
- OSGI (2)
- OSGI/Gemini (0)
- 文档写作 (0)
- java/Servlet (3)
- MQ/RabbitMQ (2)
- MQ/RocketMQ (0)
- MQ/Kafka (1)
- maven (0)
- SYS/linux (1)
- cache/redis (1)
- DB/Mongodb (2)
- nginx (1)
- postman (1)
- 操作系统/ubuntu (1)
- golang (1)
- dubbo (1)
- 技术管理岗位 (0)
- mybatis-plus (0)
最新评论
-
pgx89112:
大神,请赐我一份这个示例的项目代码吧,万分感谢,1530259 ...
spring的rabbitmq配置 -
string2020:
不使用增强器 怎么弄?
OpenJPA的增强器 -
孟江波:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!4 ...
spring的rabbitmq配置 -
eachgray:
...
spring-data-redis配置事务 -
qljoeli:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!1 ...
spring的rabbitmq配置
首先需要一个验证码生成的工具类(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 (Json) + jQuery 组合的简单用法
2011-03-01 23:02 10301、将struts2的json插件加入web工程的lib,js ... -
Struts2中$,#,%的区别
2011-03-01 22:57 1373转自:http://hi.baidu.com/di ... -
<s:generator>
2011-02-27 21:54 1417<s:generator val="%{'aa ... -
<s:merge>
2011-02-27 21:45 887<s:set var="americanCar ... -
<s:append>
2011-02-27 21:44 1242<s:set var="list1" ... -
<s:iterator>
2011-02-27 21:01 1387属性名称 必填项 默认值 ... -
<s:bean>
2011-02-27 18:32 947public class DegreeConverter { ... -
<s:param>
2011-02-27 18:21 3597param标签用来把一个参数传递给包含着它的那个标签。 不管 ... -
updownselect
2011-02-27 16:24 1394<s:updownselect name="c ... -
combobox
2011-02-27 16:08 952<s:combobox name="combo ... -
checkboxlist
2011-02-27 12:15 888ddd public class LoginAction ... -
select optgroup
2011-02-27 11:58 716代码片段: public class LoginAction ... -
select标签
2011-02-23 21:17 1013import com.opensymphony.xwork2. ... -
radio标签
2011-02-23 21:13 1009import java.util.SortedMap; ... -
list、listkey、listValue属性
2011-02-22 21:07 7246list、listKey、listValue属性对 ... -
Ongl 与 ValueStack ActionContext
2011-01-09 21:03 1470转自:http://blog.sina.com.c ... -
struts2.0的ognl表达式研究
2011-01-09 21:02 1034OGNL —— 完美的催化剂 为了解决数据从V ... -
关于Struts2.0 标签中采用%{} 的处理原理
2011-01-09 20:57 1589项目中采用struts2.0时,常常使用计算表单式的处理源码 ... -
struts2 tags
2010-01-08 13:22 12221.<s:property> propert ... -
Struts2和Freemarker整合应用批量静态页面的生成
2009-11-07 23:19 3850利用Struts2生成静态页面其实很灵活,很强大,尤其是利用S ...
相关推荐
综上所述,基于用户登录的Struts2 Action设计涉及到用户认证、权限控制、异常处理等多个方面。通过合理的分类和设计,可以构建出稳定、安全且用户体验良好的Web应用。在实践中,开发者应不断学习和掌握Struts2的特性...
总结来说,这个实例展示了Yii框架中实现验证码、登录和退出功能的基本步骤: 1. 定义模型类 `Auth` 用于处理用户数据。 2. 创建表单模型类 `IndexForm`,处理用户输入并进行验证。 3. 在控制器 `IndexController` ...
在本文中,我们将探讨如何使用Java Server Pages(JSP)技术实现用户登录、注册和退出功能。这些功能是任何Web应用程序的基础部分,尤其对于需要用户身份验证的系统而言至关重要。我们将按照以下步骤进行介绍: 1. ...
总结来说,注册、登录和注销是Web应用的基本需求,它们涉及到前端界面设计、后端业务逻辑实现、数据库操作以及会话管理等多个方面。通过理解DAO模式、Hibernate、Struts 2等技术,开发者可以构建出高效、稳定的用户...
* 实现用户登录、注册和退出功能 * 实现简洁登录界面 * 实现系统登录后的退出原理 * 实现网站的登录与注册小案例 * 实现登录功能之添加验证码 * 实现生成登录验证码 等等。Session的使用可以提高jsp应用程序的灵活...
在实际开发中,应该考虑使用验证码、HTTPS加密通信以及限制登录尝试次数等额外的安全措施。 以上就是这个PHP登录系统源码中涉及的核心知识点。虽然它提供了一个基本的框架,但在实际项目中,我们需要进一步完善和...
这样,用户在网站内的其他操作无需重复登录,直到会话过期或用户主动退出。 6. **数据库连接**:验证用户通常需要与数据库进行交互,查询用户账户信息。在JSP中,可以使用Java的JDBC API连接到数据库,执行SQL查询...
(1)基本设置:有模板缓存开关、系统定时开关等项,这里[缓存模板句柄]比较重要。如果IIS可以创建独立应用池,那么这里的缓存模板句柄可以自己加入其它模板名,提高程序运行速度!例如:日记模板名为:diary...
【后台登录】而后台帐号的用户和密码都可以更改,在右侧的管理菜单中进行更改,而且管理帐号只有一个,它不是会员,没有基本信息; 会员要是认证以上等级,右边的[管理留言]才会显示,请注意这里的区别,操作方法:...
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短信收发程序允许用户不仅发送短信,还能接收到短信通知,这在很多应用场景中都非常实用,如验证码发送、紧急通知等。下面将详细探讨相关知识点。 1. **Android SDK**:开发Android应用的基础...
测试登录功能时,我们通常会编写单元测试、集成测试和端到端测试,确保用户能够正确地登录和退出,同时处理各种异常情况,如无效的用户名或密码、验证码错误等。 总结来说,“test_login”项目涵盖了HTML页面设计、...
在本篇文章中,我们将深入探讨如何利用Django框架内置的方法来实现用户登录功能。通过详细分析Django框架内置方法实现登录功能的操作技巧及注意事项,帮助开发者更好地理解和应用这些功能。 #### 一、内置登录退出...
在`onReceive()`方法中,你可以获取到短信的相关信息,如发件人、短信内容等。通过`Intent`的`extras`可以获取到`pdus`数组,这是一个包含短信数据的二进制数组。使用`SmsMessage`类的静态方法`createFromPdu()`解析...
加密安全:对字符串进行的扩展,包含AES、DES、MD5、hash、SHA1、加盐等; 字符串扩展:包含验证码生成、各种与字符串相关的扩展; Win32API:包含于Windows系统接口相关的操作封装; 全局扩展:包含字符串扩展,...
第1章 01 计算机发展史 02 计算机系统 03 小结 04 数据的概念 05 进制转换 06 原码补码反码 07 物理层和数据链路层 08 网络层和arp协议 09 传输层和应用层 第2章 01 上节课复习 02 arp协议复习 03 字符编码 第3...
1. 登录Destoon后台管理界面。 2. 进入后台管理的模块管理功能区。 3. 选择并编辑会员注册模块的相关文件,即module/member/register.inc.php。 在register.inc.php文件中,找到以下两段代码: ```php if($action!=...
描述中的“自动推出Activity”指的是当特定短信被检测到时,应用可以主动关闭当前运行的Activity,以实现特定业务逻辑或保护用户隐私。 首先,我们来深入理解Android系统中如何处理短信: 1. **权限声明**:在...