`

Struts2的Session超时返回登录页面

 
阅读更多

 

今天做一个S2SM的项目时,在session超时或者失效时返回到登陆页面重新登陆,前台使用的easyui框架

1、首先修改web.xml

<session-config>

<session-timeout>1</session-timeout>

</session-config>

2、自定义一个登录超时的拦截器

packagecom.tungkong.util;

importjava.util.Hashtable;

importjavax.servlet.http.HttpServletResponse;

importorg.apache.struts2.ServletActionContext;

importcom.opensymphony.xwork2.ActionInvocation;

importcom.opensymphony.xwork2.interceptor.AbstractInterceptor;

 

@SuppressWarnings("serial")

publicclassLoginedCheckInterceptorextendsAbstractInterceptor{

/**session过期、登录有效性及操作的权限验证拦截器*/

@SuppressWarnings("unchecked")

@Override

publicStringintercept(ActionInvocationai)throwsException{

//取得请求的URL

Stringurl=ServletActionContext.getRequest().getRequestURL().toString();

HttpServletResponseresponse=ServletActionContext.getResponse();

response.setHeader("Pragma","No-cache");

response.setDateHeader("Expires",0);

response.setHeader("Cache-Control","no-cache");

response.setHeader("Cache-Control","no-store");

response.setHeader("Content-Type","text/html;charset=UTF-8");

response.setHeader("Cache-Control","no-store");

response.setHeader("Content-Type","text/html;charset=UTF-8");

Hashtable<String,Object>userinfo=null;

//对登录与注销请求直接放行,不予拦截

if(url.indexOf("loginAction")!=-1||url.indexOf("logoutAction")!=-1){

returnai.invoke();

}else{

//验证Session是否过期

if(!ServletActionContext.getRequest().isRequestedSessionIdValid()){

//session过期,转向session过期提示页,最终跳转至登录页面

return"tologin";

}else{

//验证是否已经登录

userinfo=(Hashtable<String,Object>)ServletActionContext.getRequest().getSession().getAttribute("userSessionHt");

if(userinfo==null){

//尚未登录,跳转至登录页面

return"tologin";

}else{

returnai.invoke();

}

}

}

}

}

 

3、在struts.xml中配置拦截器,并声明一个全局的result,当session失效的时候拦截器会转发到登陆页面,由于我使用的是多个struts文件,故应该这么设置

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEstrutsPUBLIC

"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"

"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

<!--加载默认的struts2配置文件-->

<includefile="struts-default.xml"/>

<!--业务模块配置-->

<includefile="struts-userinfo.xml"/>

………………

<constantname="struts.i18n.encoding"value="UTF-8"/>

<constantname="struts.objectFactory"value="spring"></constant>

 

<packagename="tksm"extends="struts-default">

<interceptors>

<interceptorname="loginedCheck"class="com.tungkong.util.LoginedCheckInterceptor"/>

<interceptor-stackname="mystack">

<interceptor-refname="loginedCheck"/>

<interceptor-refname="defaultStack"/>

</interceptor-stack>

</interceptors>

<global-results>

<resultname="exception">/exception.jsp</result>

<resultname="tologin">/relogin.jsp</result>

</global-results>

<global-exception-mappings>

<exception-mappingexception="java.lang.Exception"result="exception"/>

</global-exception-mappings>

</package>

</struts>

 

4、在struts-userinfo.xml中设置

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEstrutsPUBLIC

"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"

"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

 

<packagename="tksm-user"extends="tksm">

<default-interceptor-refname="mystack"/>

 

<actionname="loginAction"class="userAction"method="login">

<resultname="success">/WEB-INF/index/main.jsp</result>

<resultname="error">/WEB-INF/index/error.jsp</result>

</action>

……………………

</package>

</struts>

 

5、新建relogin.jsp页面

由于页面嵌套在iframe下,跳转时需要跳转到其父页面,因此加个中间的jsp,拦截器配置跳转到此页面,再由此页面跳转到登录页面。

relogin.jsp

 

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>

<%

Stringpath=request.getContextPath();

StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

 

<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

<html>

<head>

<basehref="<%=basePath%>">

 

<title>MyJSP'index.jsp'startingpage</title>

<metahttp-equiv="pragma"content="no-cache">

<metahttp-equiv="cache-control"content="no-cache">

<metahttp-equiv="expires"content="0">

<metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">

<metahttp-equiv="description"content="Thisismypage">

<!--

<linkrel="stylesheet"type="text/css"href="styles.css">

-->

</head>

 

<body>

<scripttype="text/javascript">

alert("对不起!您长时间对系统未进行操作,登录已超时,请重新登录!");

window.top.location.href="<%=basePath%>login.jsp";

</script>

</body>

</html>

当我们登陆后一分钟不做任何操作刷新后则会跳转到登陆页面

这篇博客主要来源于:

http://blog.csdn.net/java_cxrs/article/details/5519743

http://blog.sina.com.cn/s/blog_a72f208a01014gha.html

感谢两位!

分享到:
评论

相关推荐

    struts2_session_权限检查并控制重复登录源码

    本资源"struts2_session_权限检查并控制重复登录源码"提供了一个具体的实现方案,下面我们将深入探讨相关的知识点。 1. **Struts2框架**:Struts2是Apache软件基金会下的一个开源项目,它基于MVC设计模式,提供了...

    dwz框架实现拦截器 session超时跳转登陆页面

    dwz框架实现拦截器 session超时跳转登陆页面 DWZ框架 struts2拦截器 session超时

    Struts通过拦截器实现登录后跳转到登录前页面

    通过这样的设置,Struts2的拦截器就能够帮助我们在用户登录成功后,将其重定向回他们最初尝试访问的页面,提供更好的用户体验。同时,这种方法也使得代码更易于维护,因为登录逻辑与具体业务Action分离,遵循了单一...

    Struts2实现检查用户是否登录

    在Struts2中,一个常见的需求是确保用户在访问某些受保护的页面之前已经登录。本文将深入探讨如何使用Struts2结合session来实现用户登录检查。 首先,我们需要理解session的概念。在Web开发中,session是一种服务器...

    Struts2项目--1.简单登录验证

    总的来说,通过这个简单的Struts2登录验证项目,我们可以学习到如何使用Struts2框架进行动作映射、数据校验、业务逻辑处理以及与视图层的交互。这仅仅是Struts2功能的一个冰山一角,随着对框架的深入理解,我们可以...

    struts2登陆验证

    通过以上步骤,我们可以构建一个基本的Struts2登录验证系统。不过,实际项目中可能会更复杂,需要考虑多因素认证、密码加密存储、会话超时、记住我功能、以及前后端分离等更多细节。同时,随着技术的发展,现在的...

    struts2 用拦截器 实现用户权限登录

    本教程将详细介绍如何使用Struts2的拦截器来实现用户权限登录功能。 ### 一、拦截器的原理与作用 1. **原理**:拦截器工作在Action调用之前,它通过观察者模式实现,当一个请求到达时,会按照配置的顺序依次执行...

    struts2 注册登录

    同时,设置Session超时机制可以防止会话固定攻击。Struts2的拦截器可以用来管理和检查Session状态。 5. **登录验证码**: 验证码用于防止自动化的恶意登录尝试,通常由图片生成并结合数学问题或随机字符。在Struts...

    struts2与shiro集成(实例)

    6. 当用户访问受保护的资源时,Struts2的拦截器会先于Action执行,如果Shiro的Subject认为用户未登录或无权限,那么将不会执行Action,而是重定向到登录页面或者返回错误信息。 在实际开发中,我们还需要考虑一些...

    Struts2登录功能小练习.rar

    在这个"Struts2登录功能小练习"中,我们将深入探讨如何利用Struts2实现一个基本的用户登录系统。 首先,我们需要了解Struts2的核心组件和工作流程。Struts2框架通过拦截器机制处理HTTP请求,这些拦截器可以执行一...

    SSO单点登入,使用cookie实习(Struts2)

    6. **异常处理**:设计合理的错误处理机制,如Ticket验证失败或Session超时等情况,应引导用户重新登录。 7. **注销功能**:提供一个统一的注销接口,清除所有服务提供者的Session和Cookie,使用户在所有系统中同时...

    struts2的token实现.

    1. **创建Token**:用户访问表单页面时,Struts2会为当前会话生成一个新的Token。 2. **提交Token**:用户填写表单并提交时,Token值随着表单数据一起发送回服务器。 3. **验证Token**:服务器接收到请求后,首先...

    shiro和struts2的简单整合

    3. **会话管理(Session Management)**:Shiro可以接管应用的会话管理,提供跨域会话支持和会话超时等特性。 4. **安全标签库(Security Tags)**:Shiro提供了一套JSP标签库,可以在视图层直接进行权限控制,如`...

    struts做的登陆

    - **session超时**:考虑session过期处理,如设置session失效时间,过期后重定向至登录页面。 9. **安全注意事项** - **密码加密**:在存储和比较密码时,应先进行加密,防止明文传输和存储带来的风险。 - **...

    Struts2解决未更新会话标识

    5. **配置struts.xml**:在Struts2的配置文件中,可以通过设置全局结果或者特定Action的结果类型,来控制会话的生命周期和行为,例如设置session-timeout属性来指定会话超时时间。 为了进一步理解和解决这个问题,...

    spring2.5.5+struts2+ibatis2.3.4

    - `session-timeout`:设置 session 的超时时间。 - `welcome-file-list`:定义项目的默认欢迎页面。 #### 2.2 struts.xml 配置 - **DTD 声明**:定义了使用的 DTD 版本,确保文档结构正确。 - **include 文件**...

    struts中自定义的tag的Java类中如何获得session

    在Struts框架中,自定义标签是实现动态页面与逻辑处理分离的重要手段之一。通过自定义标签,开发者能够封装复杂的业务逻辑,使JSP页面更加简洁、易维护。本篇文章将详细探讨如何在Struts自定义标签的Java类中获取`...

    struts登陆注册功能

    Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web开发框架,它主要用于构建用户界面,尤其是在处理表单提交和业务逻辑时。在本项目中,“struts登陆注册功能”指的是利用Struts框架实现音乐应用的...

    struts2自定义拦截器(处理用户未登录非法请求)

    // 如果未登录,返回登录页面 return "login"; } else { // 已登录,允许请求继续 return invocation.invoke(); } } } ``` 2. **注册拦截器**: 在Struts2的配置文件(通常是`struts.xml`)中,我们需要...

    Struts2 Spring Hibernate

    这可以通过设置session超时时间,或者在用户退出或离开页面时主动清除session来实现。事务处理则是保证多步骤操作原子性、一致性的重要手段,尤其是在数据库操作中。在Spring框架中,可以通过@Transactional注解来...

Global site tag (gtag.js) - Google Analytics