`

struts2与cookie实现自动登录

 
阅读更多

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

struts2与cookie结合时要注意采用.action 动作的方式实现cookie的读取。好了直接看代码:
首先是struts2的配置文件:struts.xml
该配置文件,用户验证成功跳转到success.jsp页面。验证失败跳转到Login.jsp页面
[html] view plaincopy
 
  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

[java] view plaincopy
 
  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
[java] view plaincopy
 
  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
[java] view plaincopy
 
  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

[html] view plaincopy
 
  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页面
[html] view plaincopy
 
  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
[html] view plaincopy
 
  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实现自动登录的核心在于创建和解析Cookie,以及配置过滤器来读取Cookie并恢复上下文。这个过程中涉及到了Web安全、用户认证、过滤器机制等知识点,对于开发安全、高效的Web应用非常重要...

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

    在本文中,我们将深入探讨如何使用Struts2框架与Cookie技术来实现自动登录和验证码验证。Struts2是一个流行的Java Web开发框架,它提供了一种结构化的MVC(Model-View-Controller)模式来构建应用程序。Cookie则是一...

    实现cookie记住自动登录

    1.代码是完整的导入到 myEclipse 中就可以使用 2.实现struts cookie 记住两周 自动登录功能 3.访问地址:http://127.0.0.1:8080/cookie/index.jsp 4.系统默认有两个账户 在 UserDao 中可以查到

    strut2使用cookie实现自动登录

    本篇文章将深入探讨如何在Struts2框架下利用Cookie技术实现自动登录功能。 自动登录的基本思路是:当用户首次登录成功后,服务器会创建一个包含用户信息的Cookie,并将其发送到客户端浏览器。然后,当用户再次访问...

    struts2的token实现.

    2. **验证Token**:在Action的execute方法或其他处理表单的方法中,Struts2会自动进行Token验证。如果Token无效,Action的execute方法不会被执行,而是返回一个默认的错误结果,比如`input`。 3. **处理Token异常**...

    struts2实现国际化

    Struts2提供了一种简单而有效的方法来实现这一目标。 首先,我们需要理解国际化的基本概念。国际化(i18n)是使软件能够适应不同地区的文化、语言和格式的过程。这通常涉及到资源文件的使用,这些文件存储了应用中...

    struts2实现自主选择页面语言

    在“struts2实现自主选择页面语言”这个项目中,我们主要探讨的是如何利用Struts2的国际化(i18n)功能来支持多语言环境,使用户可以根据自己的偏好选择页面显示的语言。 首先,让我们了解一下什么是国际化(i18n)。...

    struts2实现的中英文切换

    考虑到浏览器默认语言的设置,Struts2会自动检测并使用它。可以通过覆盖`struts.properties`中的`struts.locale`属性来自定义默认语言。 7. **处理动态切换**: 如果需要在用户操作时动态切换语言,可以在Action...

    国际化与struts2

    标题提到的“国际化与Struts2”意味着我们将探讨如何在Struts2应用中实现多语言支持。在描述中提到的“与上一个文件是相同效果、相同目的的升级文件”,可能是指这个文件包含了一些更新或者改进,用于增强之前版本的...

    struts2国际化例子源码

    总结,这个Struts2国际化例子源码展示了如何在Java web应用中实现多语言支持,通过配置Struts2框架、编写Action类、创建资源文件以及在JSP页面中使用标签,实现了对不同语言环境的适应。这个例子对于理解和实践...

    struts 2 国际化 自动语言切换

    下面将详细解释如何在Struts2中进行国际化设置,并实现自动语言切换。 首先,我们需要理解国际化的基本概念。国际化是一种设计方法,使软件能够在多种语言和文化环境下运行,而无需进行大量的代码修改。在Java中,...

    Struts2 登录验证实例

    6. **FilterDispatcher**:Struts2的核心组件之一,它是Struts2与Servlet容器交互的桥梁。所有HTTP请求都会经过FilterDispatcher,它解析请求,调用Action,然后返回响应。 7. **依赖库**:提供的压缩包文件包含了...

    登陆验证码(struts2实现)

    在这个场景下,我们将探讨如何在Struts2框架中实现登录验证。 首先,验证码的生成通常涉及以下几个步骤: 1. **生成随机字符串或数字**:验证码通常由4到6个随机字符组成,这些字符可以是字母、数字或两者的组合。...

    cookie实例

    **描述分析:** 描述中提到的是一个适合初学者的Cookie实现自动登录和浏览记录的案例。由于案例未涉及数据库连接,它可能依赖于Struts框架,这是一个基于MVC设计模式的Java Web应用框架,它允许开发者处理HTTP请求和...

    struts2+eclipse 登录和注册小模块

    Cookie则可以用来记住用户的选择,如自动登录。 8. **安全考虑**:在实际应用中,密码通常需要加密存储,防止数据泄露。此外,还需防范SQL注入和XSS攻击,对用户输入进行过滤和转义。 9. **源程序分析**:压缩包中...

    struts2上传图片

    然后,在Action类中创建对应的属性并添加setter/getter方法,Struts2会自动填充上传的文件: ```java private File image; private String imageContentType; private String imageFileName; public void setImage...

    Struts2登录功能小练习.rar

    6. **使用拦截器**:Struts2提供了丰富的拦截器,如Validation拦截器可以自动进行字段验证,LoginInterceptor可以检查用户是否已登录。你可以在配置文件中添加这些拦截器以增强功能。 7. **安全考虑**:在实际项目...

    Struts2中访问web元素的例子

    Struts2是一个强大的Java web开发框架,它简化了MVC(模型-视图-控制器)架构的实现,提供了丰富的功能和灵活的配置选项。在Struts2中,访问web元素是开发过程中常见的需求,比如获取请求参数、session数据或者...

    Struts2+Hibernate3.2+spring2.0+sqlserver2000

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

Global site tag (gtag.js) - Google Analytics