`

struts2与cookie结合实现自动登录

阅读更多

一、本文主要介绍struts2与cookie结合实现自动登录

转:http://blog.csdn.net/afgasdg/article/details/6642628

struts2与cookie结合时要注意采用.action 动作的方式实现cookie的读取。好了直接看代码:
首先是struts2的配置文件:struts.xml
该配置文件,用户验证成功跳转到success.jsp页面。验证失败跳转到Login.jsp页面
  1. <span style="font-size:24px;"><?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">  
  3. <struts>  
  4.     <constant name="struts.i18n.encoding" value="GBK" />  
  5.     <package name="user" namespace="/user" extends="struts-default">  
  6.         <!-- 用户登录 -->  
  7.         <action name="login" class="cn.edu.pdsu.action.LoginAction">  
  8.             <result name="success" type="redirect">/success.jsp</result>  
  9.             <result name="login">/login.jsp </result>  
  10.         </action>  
  11.     </package>  
  12. </struts></span>  


接着是action文件,LoginAction.java

  1. <span style="font-size:18px;">package cn.edu.pdsu.action;  
  2.   
  3. import java.util.Map;  
  4.   
  5. import javax.servlet.http.Cookie;  
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.http.HttpServletResponse;  
  8. import javax.servlet.http.HttpSession;  
  9.   
  10. import org.apache.struts2.interceptor.ServletRequestAware;  
  11. import org.apache.struts2.interceptor.ServletResponseAware;  
  12. import org.apache.struts2.interceptor.SessionAware;  
  13.   
  14. import cn.edu.pdsu.bean.User;  
  15. import cn.edu.pdsu.dao.UserDao;  
  16. import cn.edu.pdsu.utils.CookieUtils;  
  17.   
  18. import com.opensymphony.xwork2.ActionSupport;  
  19.   
  20. public class LoginAction extends ActionSupport implements ServletRequestAware,  
  21.         ServletResponseAware, SessionAware {  
  22.     private static final long serialVersionUID = 6650955874307814247L;  
  23.     public static final String USER_SESSION = "user.session";  
  24.     private HttpServletResponse response;  
  25.     private HttpServletRequest request;  
  26.     private Map<String, Object> session;  
  27.     private CookieUtils cookieUtils = new CookieUtils();  
  28.     private UserDao userDao = new UserDao();  
  29.     private String username;  
  30.     private String password;  
  31.     private boolean userCookie;  
  32.   
  33.     // 用户登录跳转  
  34.     public String login() {  
  35.         if (cookieUtils.getCookie(request, userDao)) {  
  36.             return SUCCESS;  
  37.         } else  
  38.             return "login";  
  39.     }  
  40.   
  41.     @Override  
  42.     // 正常登录  
  43.     public String execute() throws Exception {  
  44.         System.out.println(username + "\t" + password + "\t" + userCookie);  
  45.         String username = getUsername().trim();  
  46.         if (username != null && !"".equals(username) && password != null  
  47.                 && !"".equals(password)) {  
  48.             User user = userDao.checkUser(username, password);  
  49.             System.out.println(user);  
  50.             if (user != null) {  
  51.                 // 判断是否要添加到cookie中  
  52.                 if (userCookie) {  
  53.                     Cookie cookie = cookieUtils.addCookie(user);  
  54.                     response.addCookie(cookie);// 添加cookie到response中  
  55.                 }  
  56.                 // 2.将user 设置到session中  
  57.                 session.put(USER_SESSION, user);  
  58.                 return SUCCESS;  
  59.             }  
  60.         }  
  61.         this.addFieldError("username""用户名或密码错误!");  
  62.         return "login";  
  63.     }  
  64.   
  65.     // 用户退出  
  66.     public String logout() {  
  67.         HttpSession session = request.getSession(false);  
  68.         if (session != null)  
  69.             session.removeAttribute(USER_SESSION);  
  70.         Cookie cookie = cookieUtils.delCookie(request);  
  71.         if (cookie != null)  
  72.             response.addCookie(cookie);  
  73.         return "login";  
  74.     }  
  75.   
  76.     public boolean getUserCookie() {  
  77.         return userCookie;  
  78.     }  
  79.   
  80.     public void setUserCookie(boolean userCookie) {  
  81.         this.userCookie = userCookie;  
  82.     }  
  83.   
  84.     public String getUsername() {  
  85.         return username;  
  86.     }  
  87.   
  88.     public void setUsername(String username) {  
  89.         this.username = username;  
  90.     }  
  91.   
  92.     public String getPassword() {  
  93.         return password;  
  94.     }  
  95.   
  96.     public void setPassword(String password) {  
  97.         this.password = password;  
  98.     }  
  99.   
  100.     public void setServletResponse(HttpServletResponse response) {  
  101.         this.response = response;  
  102.     }  
  103.   
  104.     public void setSession(Map<String, Object> session) {  
  105.         this.session = session;  
  106.     }  
  107.   
  108.     public void setServletRequest(HttpServletRequest request) {  
  109.         this.request = request;  
  110.     }  
  111.   
  112. }  
  113. </span>  
接下来是cookie工具类,主要是cookie的添加、删除与查询。CookieUtils.java
  1. package cn.edu.pdsu.utils;  
  2.   
  3. import javax.servlet.http.Cookie;  
  4. import javax.servlet.http.HttpServletRequest;  
  5. import javax.servlet.http.HttpSession;  
  6.   
  7. import org.apache.commons.lang.StringUtils;  
  8.   
  9. import cn.edu.pdsu.action.LoginAction;  
  10. import cn.edu.pdsu.bean.User;  
  11. import cn.edu.pdsu.dao.UserDao;  
  12.   
  13. /** 
  14.  * cookie的增加、删除、查询 
  15.  */  
  16. public class CookieUtils {  
  17.     public static final String USER_COOKIE = "user.cookie";  
  18.   
  19.     // 添加一个cookie  
  20.     public Cookie addCookie(User user) {  
  21.         Cookie cookie = new Cookie(USER_COOKIE, user.getUsername() + ","  
  22.                 + user.getPassword());  
  23.         System.out.println("添加cookie");  
  24.         cookie.setMaxAge(60 * 60 * 24 * 14);// cookie保存两周  
  25.         return cookie;  
  26.     }  
  27.   
  28.     // 得到cookie  
  29.     public boolean getCookie(HttpServletRequest request, UserDao userDAO) {  
  30.         Cookie[] cookies = request.getCookies();  
  31.         System.out.println("cookies: " + cookies);  
  32.         if (cookies != null) {  
  33.             for (Cookie cookie : cookies) {  
  34.                 System.out.println("cookie: " + cookie.getName());  
  35.                 if (CookieUtils.USER_COOKIE.equals(cookie.getName())) {  
  36.                     String value = cookie.getValue();  
  37.                     if (StringUtils.isNotBlank(value)) {  
  38.                         String[] split = value.split(",");  
  39.                         String username = split[0];  
  40.                         String password = split[1];  
  41.                         User user = userDAO.checkUser(username, password);  
  42.                         if (user != null) {  
  43.                             HttpSession session = request.getSession();  
  44.                             session.setAttribute(LoginAction.USER_SESSION, user);// 添加用户到session中  
  45.                             return true;  
  46.                         }  
  47.                     }  
  48.                 }  
  49.             }  
  50.         }  
  51.         return false;  
  52.     }  
  53.   
  54.     // 删除cookie  
  55.     public Cookie delCookie(HttpServletRequest request) {  
  56.         Cookie[] cookies = request.getCookies();  
  57.         if (cookies != null) {  
  58.             for (Cookie cookie : cookies) {  
  59.                 if (USER_COOKIE.equals(cookie.getName())) {  
  60.                     cookie.setValue("");  
  61.                     cookie.setMaxAge(0);  
  62.                     return cookie;  
  63.                 }  
  64.             }  
  65.         }  
  66.         return null;  
  67.     }  
  68. }  

接着上的是用户信息验证类,UserDao.java
  1. package cn.edu.pdsu.dao;  
  2.   
  3. import cn.edu.pdsu.bean.User;  
  4.   
  5. /** 
  6.  * 用户的有效性校验 
  7.  */  
  8. public class UserDao {  
  9.   
  10.     // 模拟查找用户  
  11.     public User checkUser(String username, String password) {  
  12.         if (username.equals("hello") && password.equals("123")) {  
  13.             User user = new User();  
  14.             user.setUsername("hello");  
  15.             user.setPassword("123");  
  16.             return user;  
  17.         }  
  18.         return null;  
  19.     }  
  20.   
  21. }  
接着就是用户登录页面,login.jsp

  1. <span style="font-size:18px;"><%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>  
  2. <%@taglib prefix="s" uri="/struts-tags" %>  
  3. <%  
  4. String path = request.getContextPath();  
  5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  6. %>  
  7.   
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  9. <html>  
  10.   <head>  
  11.     <base href="<%=basePath%>">  
  12.     <title>登录页面</title>  
  13.   </head>  
  14.   <body>  
  15.    <center>  
  16.    <s:form action="login" namespace="/user" method="post">  
  17.    <s:textfield label="用户名" name="username"></s:textfield>  
  18.    <s:password label="密码" name="password"></s:password>  
  19.    <s:checkbox label="自动登录" name="userCookie" value="true"></s:checkbox>  
  20.    <s:submit value="提交"></s:submit>  
  21.    </s:form>  
  22.    </center>  
  23.   </body>  
  24. </html>  
  25. </span>  
接着是index.jsp页面
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. response.sendRedirect(basePath+"user/login!login.action");  
  6. %>  

登录成功页面success.jsp

 

  1. <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>  
  2. <%@taglib prefix="s" uri="/struts-tags" %>  
  3. <%  
  4. String path = request.getContextPath();  
  5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  6. %>  
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  8. <html>  
  9.   <head>  
  10.     <base href="<%=basePath%>">  
  11.     <title>登录成功!</title>  
  12.   </head>  
  13.   <body>  
  14.     <h1>欢迎您的到来!</h1><br>  
  15.     <s:a action="login!logout.action" namespace="/user"> 安全退出</s:a>  
  16.   </body>  
  17. </html>  
分享到:
评论

相关推荐

    struts2与cookie实现自动登录

    在实现自动登录功能时,Struts2和Cookie的结合使用可以极大地提升用户体验,让用户在访问网站时无需反复输入用户名和密码。 自动登录的核心思想是:当用户首次登录成功后,将认证信息(如加密后的用户名和密码或一...

    struts2与cookie 实现自动登录和验证码验证实现代码

    在描述中提到的"struts2与cookie结合时要注意采用.action动作的方式实现cookie的读取",这可能意味着我们需要创建一个特定的Action,该Action在执行前检查Cookie中的登录信息,如果有效,则直接跳转到已登录状态的...

    Struts2 登录验证实例

    本实例将深入探讨如何在Struts2中实现登录验证功能,这对于任何涉及用户身份验证的Web应用来说都是至关重要的。我们将探讨以下几个关键知识点: 1. **Struts2框架基础**:Struts2作为MVC框架,它提供了处理HTTP请求...

    Struts2+Hibernate3.2+spring2.0+sqlserver2000

    在这个项目中,SSH2框架与SQL Server 2000的结合,实现了用户登录和客户列表查询功能。这通常涉及到以下步骤: 1. 用户在前端(通常是HTML页面)填写登录信息,通过Struts2的Action提交请求。 2. Struts2拦截请求,...

    struts2 国际化

    5. 动态切换语言:为了允许用户在应用中动态切换语言,可以在页面上提供一个选择语言的选项,通过提交表单或点击链接来改变`session`或`cookie`中的Locale信息,然后重定向到当前页面,Struts2会自动应用新的语言...

    struts2资料

    **Struts2与Ajax集成:** Struts2通过JSON结果类型支持Ajax请求。你可以创建一个Action,配置为返回JSON结果,然后在JavaScript中使用Ajax调用这个Action。Struts2的插件如struts2-jquery或struts2-dojo可以帮助更...

    struts2开发 token.rar

    通过解压并导入到Eclipse或MyEclipse,开发者可以学习和分析实际的代码实现,了解Token如何与Struts2框架结合,以及如何防止重复提交攻击。 总的来说,这个压缩包是一个关于Struts2框架中Token机制的实战示例,涵盖...

    struts2_token控制刷新重复提交

    3. **验证Token:** 在处理表单提交的Action方法中,Struts2的Token拦截器会自动进行Token验证。如果验证失败(比如因为用户刷新页面),拦截器会抛出一个`TokenException`,你可以捕获这个异常并处理。 ```java ...

    Cookie例子.docx

    在本文中,我们将深入探讨有关Cookie的基础...在Struts2等框架中,Cookie可以与Action和Session结合,实现用户登录状态的维护和管理。理解并熟练掌握Cookie的使用,对于提升Web应用的用户体验和安全性具有重要意义。

    struts2的学习笔记+测试源代码

    Struts2会自动处理Token的生成和验证,无需程序员过多干预。当表单提交时,Struts2会检查Token,如果验证失败,将会抛出`InvalidTokenException`异常。 四、Token机制的优势 1. 防止重复提交:在用户意外刷新页面...

    基于struts的网上审批系统

    3. **Session与Cookie**:用于在客户端和服务器之间保持状态,例如用户登录信息、审批流程的上下文等。 **网上审批系统的特性:** 1. **用户角色管理**:系统可能有不同级别的审批者,每个角色有不同的权限和审批...

    STRUTS2验证码

    这个项目案例对于理解Struts2框架如何与验证码机制结合,以及如何在实际项目中实现安全控制具有很高的学习价值。通过分析`authcode.jar`中的代码,开发者可以深入理解验证码的生成和验证过程,以及如何在Struts2框架...

    自定义实现的类似struts框架

    实现这一功能通常需要结合HTTP请求对象,将表单数据保存在session或cookie中,当需要回填时再读取这些信息。 其次,**表单验证**是确保数据质量的重要环节。在自定义框架中,我们可以定义验证规则,如必填项、长度...

    网上书城 jsp+struts+spring

    【标题】"网上书城 jsp+struts+spring"是一个基于Java技术栈的Web应用程序,主要用于实现在线书店的功能。这个项目将jsp(JavaServer Pages)用于视图展示,Struts作为MVC(模型-视图-控制器)框架处理业务逻辑,而...

    JSP和Struts解决用户退出问题

    2. **清理cookies**: 如果应用使用了cookies来保持登录状态,比如记住用户名或自动登录功能,那么在退出时,也需要删除对应的cookies。这可以通过`response.clearCookie()`方法实现。 3. **重定向用户**: 退出操作...

    struts拦截器介绍

    2. **ChainingInterceptor**:链式拦截器,使得前一个Action的属性能够被后续的Action访问,通常与`&lt;result type="chain"&gt;` 结合使用,实现Action间的流转。 3. **CheckboxInterceptor**:复选框拦截器,处理未被...

    login 实现国际化(中文、English 【可扩充】)

    在这个主题中,我们将深入探讨如何在Java Web项目中实现登录页面的国际化,以Struts 2框架为例。 首先,我们需要理解Struts 2框架的基础。Struts 2是一个基于MVC(Model-View-Controller)设计模式的开源Java Web...

    struts token的例包

    总之,Struts Token机制是提升Web应用安全性的重要手段,通过结合适当的实践,我们可以有效地防止重复提交和CSRF攻击,确保用户操作的安全和正确性。在实际项目中,理解并正确应用Token机制至关重要。

    Struts 标签库

    Struts标签库是Java开发Web应用程序时常用的一种工具,尤其在基于Struts框架的项目中,它极大地简化了HTML页面与Java后端交互的复杂性。这个标签库主要由Struts HTML标签库、Struts Bean标签库、Struts Logic标签库...

    struts1标签库

    它通常与Struts的资源包配合使用,可以实现多语言支持。 6. `bean:page`:这个标签用于访问当前JSP页面的属性。它可以从页面级作用域中获取和显示数据。 7. `bean:parameter`:这个标签用来获取HTTP请求参数的值。...

Global site tag (gtag.js) - Google Analytics