`

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 实现自动登录和验证码验证实现代码的相关资料,需要的朋友可以参考下

    struts2用cookie实现自动登录中用过滤器执行读取上下文方法

    NULL 博文链接:https://zhitangrui2010.iteye.com/blog/2240038

    实现cookie记住自动登录

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

    cookie实例

    cookie实现自动登录以及浏览记录案例 案例简单,适合初学者 由于时间仓促没有数据库连接,直接使用struts来做的 默认账户:hello 密码:123

    java web技术开发大全(最全最新)

    提供典型应用案例,剖析JSP/Servret技术与Struts 2技术在Web开发中的不同 提供完整的应用案例,使读者可以深入体会SSH开发模式的精髓 ...第26章 Struts 2与Hibernate、Spring的整合 第27章 网络硬盘 第28章 论坛系统

    java web开发技术大全

    提供典型应用案例,剖析JSP/Servret技术与Struts 2技术在Web开发中的不同 提供完整的应用案例,使读者可以深入体会SSH开发模式的...第26章 Struts 2与Hibernate、Spring的整合 第27章 网络硬盘 第28章 论坛系统

    MF00617-JAVA餐厅点餐管理源码.zip

    使用技术:spring+Struts+hibernate+bootstrap+jquery+ajax 源码描述 SSH开发一个前台结算,前台点餐,后台综合信息管理,后厨配菜的完整源码 登陆:前后台同用一个登陆页面,登陆等过用户名访问数据库获取该对象...

    李兴华Java Web开发实战经典(高清版) Part2

    9.10.2、实现过滤器 9.10.3、过滤器的应用 9.11、监听器 9.11.1、对application监听 9.11.2、对session监听 9.11.3、对request监听 9.11.4、监听器实例 —— 在线人员统计 9.12、本章摘要 9.13、开发...

    java web 视频、电子书、源码(李兴华老师出版)

    9.10.2、实现过滤器 9.10.3、过滤器的应用 9.11、监听器 9.11.1、对application监听 9.11.2、对session监听 9.11.3、对request监听 9.11.4、监听器实例 —— 在线人员统计 9.12、本章摘要 9.13、开发...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 上

    9.10.2、实现过滤器 9.10.3、过滤器的应用 9.11、监听器 9.11.1、对application监听 9.11.2、对session监听 9.11.3、对request监听 9.11.4、监听器实例 —— 在线人员统计 9.12、本章摘要 9.13、开发实战...

    MLDN+李兴华+Java+Web开发实战经典.part3.rar )

    9.10.2、实现过滤器 9.10.3、过滤器的应用 9.11、监听器 9.11.1、对application监听 9.11.2、对session监听 9.11.3、对request监听 9.11.4、监听器实例 —— 在线人员统计 9.12、本章摘要 9.13、开发...

    李兴华 java_web开发实战经典 源码 完整版收集共享

    9.10.2、实现过滤器 9.10.3、过滤器的应用 9.11、监听器 9.11.1、对application监听 9.11.2、对session监听 9.11.3、对request监听 9.11.4、监听器实例 —— 在线人员统计 9.12、本章摘要 9.13、开发实战...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 下

    9.10.2、实现过滤器 9.10.3、过滤器的应用 9.11、监听器 9.11.1、对application监听 9.11.2、对session监听 9.11.3、对request监听 9.11.4、监听器实例 —— 在线人员统计 9.12、本章摘要 9.13、开发实战...

    李兴华Java Web开发实战经典.pdf (高清版) Part1

    9.10.2、实现过滤器 9.10.3、过滤器的应用 9.11、监听器 9.11.1、对application监听 9.11.2、对session监听 9.11.3、对request监听 9.11.4、监听器实例 —— 在线人员统计 9.12、本章摘要 9.13、开发...

    李兴华 Java Web 开发实战经典 高清扫描版Part3

    9.10.2、实现过滤器 9.10.3、过滤器的应用 9.11、监听器 9.11.1、对application监听 9.11.2、对session监听 9.11.3、对request监听 9.11.4、监听器实例 —— 在线人员统计 9.12、本章摘要 9.13、开发实战...

    史上最全java面试,103项重点知识,带目录

    69. 如果客户端禁止 cookie 能实现 session 还能用吗? 31 70. spring mvc 和 struts 的区别是什么? 31 71. 如何避免 sql 注入? 33 72. 什么是 XSS 攻击,如何避免? 33 73. 什么是 CSRF 攻击,如何避免? 33 七、...

    JAVA面试题最全集

    2.s-EJB 与 e-EJB的区别 3.会话面的作用 4.cmp与bmp的优缺点 5.j2me程序的必需的几个部分 6.c/s与b/s的区别 7.构建一个connect pool,然后再调用它, 8.j2ee平台与dotnet平台的区别 9.ejb的life cycle 10....

    超级有影响力霸气的Java面试题大全文档

     Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别...

    java 面试题 总结

    Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别...

Global site tag (gtag.js) - Google Analytics