一、本文主要介绍struts2与cookie结合实现自动登录
struts2与cookie结合时要注意采用.action 动作的方式实现cookie的读取。好了直接看代码:
首先是struts2的配置文件:struts.xml
该配置文件,用户验证成功跳转到success.jsp页面。验证失败跳转到Login.jsp页面
- <span style="font-size:24px;"><?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
- <struts>
- <constant name="struts.i18n.encoding" value="GBK" />
- <package name="user" namespace="/user" extends="struts-default">
- <!-- 用户登录 -->
- <action name="login" class="cn.edu.pdsu.action.LoginAction">
- <result name="success" type="redirect">/success.jsp</result>
- <result name="login">/login.jsp </result>
- </action>
- </package>
- </struts></span>
接着是action文件,LoginAction.java
- <span style="font-size:18px;">package cn.edu.pdsu.action;
- import java.util.Map;
- import javax.servlet.http.Cookie;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- import org.apache.struts2.interceptor.ServletRequestAware;
- import org.apache.struts2.interceptor.ServletResponseAware;
- import org.apache.struts2.interceptor.SessionAware;
- import cn.edu.pdsu.bean.User;
- import cn.edu.pdsu.dao.UserDao;
- import cn.edu.pdsu.utils.CookieUtils;
- import com.opensymphony.xwork2.ActionSupport;
- public class LoginAction extends ActionSupport implements ServletRequestAware,
- ServletResponseAware, SessionAware {
- private static final long serialVersionUID = 6650955874307814247L;
- public static final String USER_SESSION = "user.session";
- private HttpServletResponse response;
- private HttpServletRequest request;
- private Map<String, Object> session;
- private CookieUtils cookieUtils = new CookieUtils();
- private UserDao userDao = new UserDao();
- private String username;
- private String password;
- private boolean userCookie;
- // 用户登录跳转
- public String login() {
- if (cookieUtils.getCookie(request, userDao)) {
- return SUCCESS;
- } else
- return "login";
- }
- @Override
- // 正常登录
- public String execute() throws Exception {
- System.out.println(username + "\t" + password + "\t" + userCookie);
- String username = getUsername().trim();
- if (username != null && !"".equals(username) && password != null
- && !"".equals(password)) {
- User user = userDao.checkUser(username, password);
- System.out.println(user);
- if (user != null) {
- // 判断是否要添加到cookie中
- if (userCookie) {
- Cookie cookie = cookieUtils.addCookie(user);
- response.addCookie(cookie);// 添加cookie到response中
- }
- // 2.将user 设置到session中
- session.put(USER_SESSION, user);
- return SUCCESS;
- }
- }
- this.addFieldError("username", "用户名或密码错误!");
- return "login";
- }
- // 用户退出
- public String logout() {
- HttpSession session = request.getSession(false);
- if (session != null)
- session.removeAttribute(USER_SESSION);
- Cookie cookie = cookieUtils.delCookie(request);
- if (cookie != null)
- response.addCookie(cookie);
- return "login";
- }
- public boolean getUserCookie() {
- return userCookie;
- }
- public void setUserCookie(boolean userCookie) {
- this.userCookie = userCookie;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public void setServletResponse(HttpServletResponse response) {
- this.response = response;
- }
- public void setSession(Map<String, Object> session) {
- this.session = session;
- }
- public void setServletRequest(HttpServletRequest request) {
- this.request = request;
- }
- }
- </span>
- package cn.edu.pdsu.utils;
- import javax.servlet.http.Cookie;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpSession;
- import org.apache.commons.lang.StringUtils;
- import cn.edu.pdsu.action.LoginAction;
- import cn.edu.pdsu.bean.User;
- import cn.edu.pdsu.dao.UserDao;
- /**
- * cookie的增加、删除、查询
- */
- public class CookieUtils {
- public static final String USER_COOKIE = "user.cookie";
- // 添加一个cookie
- public Cookie addCookie(User user) {
- Cookie cookie = new Cookie(USER_COOKIE, user.getUsername() + ","
- + user.getPassword());
- System.out.println("添加cookie");
- cookie.setMaxAge(60 * 60 * 24 * 14);// cookie保存两周
- return cookie;
- }
- // 得到cookie
- public boolean getCookie(HttpServletRequest request, UserDao userDAO) {
- Cookie[] cookies = request.getCookies();
- System.out.println("cookies: " + cookies);
- if (cookies != null) {
- for (Cookie cookie : cookies) {
- System.out.println("cookie: " + cookie.getName());
- if (CookieUtils.USER_COOKIE.equals(cookie.getName())) {
- String value = cookie.getValue();
- if (StringUtils.isNotBlank(value)) {
- String[] split = value.split(",");
- String username = split[0];
- String password = split[1];
- User user = userDAO.checkUser(username, password);
- if (user != null) {
- HttpSession session = request.getSession();
- session.setAttribute(LoginAction.USER_SESSION, user);// 添加用户到session中
- return true;
- }
- }
- }
- }
- }
- return false;
- }
- // 删除cookie
- public Cookie delCookie(HttpServletRequest request) {
- Cookie[] cookies = request.getCookies();
- if (cookies != null) {
- for (Cookie cookie : cookies) {
- if (USER_COOKIE.equals(cookie.getName())) {
- cookie.setValue("");
- cookie.setMaxAge(0);
- return cookie;
- }
- }
- }
- return null;
- }
- }
接着上的是用户信息验证类,UserDao.java
- package cn.edu.pdsu.dao;
- import cn.edu.pdsu.bean.User;
- /**
- * 用户的有效性校验
- */
- public class UserDao {
- // 模拟查找用户
- public User checkUser(String username, String password) {
- if (username.equals("hello") && password.equals("123")) {
- User user = new User();
- user.setUsername("hello");
- user.setPassword("123");
- return user;
- }
- return null;
- }
- }
- <span style="font-size:18px;"><%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
- <%@taglib prefix="s" uri="/struts-tags" %>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>登录页面</title>
- </head>
- <body>
- <center>
- <s:form action="login" namespace="/user" method="post">
- <s:textfield label="用户名" name="username"></s:textfield>
- <s:password label="密码" name="password"></s:password>
- <s:checkbox label="自动登录" name="userCookie" value="true"></s:checkbox>
- <s:submit value="提交"></s:submit>
- </s:form>
- </center>
- </body>
- </html>
- </span>
- <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- response.sendRedirect(basePath+"user/login!login.action");
- %>
登录成功页面success.jsp
- <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
- <%@taglib prefix="s" uri="/struts-tags" %>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>登录成功!</title>
- </head>
- <body>
- <h1>欢迎您的到来!</h1><br>
- <s:a action="login!logout.action" namespace="/user"> 安全退出</s:a>
- </body>
- </html>
相关推荐
综上所述,Struts2使用Cookie实现自动登录的核心在于创建和解析Cookie,以及配置过滤器来读取Cookie并恢复上下文。这个过程中涉及到了Web安全、用户认证、过滤器机制等知识点,对于开发安全、高效的Web应用非常重要...
在本文中,我们将深入探讨如何使用Struts2框架与Cookie技术来实现自动登录和验证码验证。Struts2是一个流行的Java Web开发框架,它提供了一种结构化的MVC(Model-View-Controller)模式来构建应用程序。Cookie则是一...
1.代码是完整的导入到 myEclipse 中就可以使用 2.实现struts cookie 记住两周 自动登录功能 3.访问地址:http://127.0.0.1:8080/cookie/index.jsp 4.系统默认有两个账户 在 UserDao 中可以查到
本篇文章将深入探讨如何在Struts2框架下利用Cookie技术实现自动登录功能。 自动登录的基本思路是:当用户首次登录成功后,服务器会创建一个包含用户信息的Cookie,并将其发送到客户端浏览器。然后,当用户再次访问...
2. **验证Token**:在Action的execute方法或其他处理表单的方法中,Struts2会自动进行Token验证。如果Token无效,Action的execute方法不会被执行,而是返回一个默认的错误结果,比如`input`。 3. **处理Token异常**...
Struts2提供了一种简单而有效的方法来实现这一目标。 首先,我们需要理解国际化的基本概念。国际化(i18n)是使软件能够适应不同地区的文化、语言和格式的过程。这通常涉及到资源文件的使用,这些文件存储了应用中...
在“struts2实现自主选择页面语言”这个项目中,我们主要探讨的是如何利用Struts2的国际化(i18n)功能来支持多语言环境,使用户可以根据自己的偏好选择页面显示的语言。 首先,让我们了解一下什么是国际化(i18n)。...
考虑到浏览器默认语言的设置,Struts2会自动检测并使用它。可以通过覆盖`struts.properties`中的`struts.locale`属性来自定义默认语言。 7. **处理动态切换**: 如果需要在用户操作时动态切换语言,可以在Action...
标题提到的“国际化与Struts2”意味着我们将探讨如何在Struts2应用中实现多语言支持。在描述中提到的“与上一个文件是相同效果、相同目的的升级文件”,可能是指这个文件包含了一些更新或者改进,用于增强之前版本的...
总结,这个Struts2国际化例子源码展示了如何在Java web应用中实现多语言支持,通过配置Struts2框架、编写Action类、创建资源文件以及在JSP页面中使用标签,实现了对不同语言环境的适应。这个例子对于理解和实践...
下面将详细解释如何在Struts2中进行国际化设置,并实现自动语言切换。 首先,我们需要理解国际化的基本概念。国际化是一种设计方法,使软件能够在多种语言和文化环境下运行,而无需进行大量的代码修改。在Java中,...
6. **FilterDispatcher**:Struts2的核心组件之一,它是Struts2与Servlet容器交互的桥梁。所有HTTP请求都会经过FilterDispatcher,它解析请求,调用Action,然后返回响应。 7. **依赖库**:提供的压缩包文件包含了...
在这个场景下,我们将探讨如何在Struts2框架中实现登录验证。 首先,验证码的生成通常涉及以下几个步骤: 1. **生成随机字符串或数字**:验证码通常由4到6个随机字符组成,这些字符可以是字母、数字或两者的组合。...
**描述分析:** 描述中提到的是一个适合初学者的Cookie实现自动登录和浏览记录的案例。由于案例未涉及数据库连接,它可能依赖于Struts框架,这是一个基于MVC设计模式的Java Web应用框架,它允许开发者处理HTTP请求和...
Cookie则可以用来记住用户的选择,如自动登录。 8. **安全考虑**:在实际应用中,密码通常需要加密存储,防止数据泄露。此外,还需防范SQL注入和XSS攻击,对用户输入进行过滤和转义。 9. **源程序分析**:压缩包中...
然后,在Action类中创建对应的属性并添加setter/getter方法,Struts2会自动填充上传的文件: ```java private File image; private String imageContentType; private String imageFileName; public void setImage...
6. **使用拦截器**:Struts2提供了丰富的拦截器,如Validation拦截器可以自动进行字段验证,LoginInterceptor可以检查用户是否已登录。你可以在配置文件中添加这些拦截器以增强功能。 7. **安全考虑**:在实际项目...
Struts2是一个强大的Java web开发框架,它简化了MVC(模型-视图-控制器)架构的实现,提供了丰富的功能和灵活的配置选项。在Struts2中,访问web元素是开发过程中常见的需求,比如获取请求参数、session数据或者...
在这个项目中,SSH2框架与SQL Server 2000的结合,实现了用户登录和客户列表查询功能。这通常涉及到以下步骤: 1. 用户在前端(通常是HTML页面)填写登录信息,通过Struts2的Action提交请求。 2. Struts2拦截请求,...