• struts2拦截器实现session超时返回登录页面(iframe下跳转到其父页面)


    需求:session超时时,返回登录页面,由于页面嵌套在iframe下,因此要跳转到登录页面的父页面,但是首页,登录页面等不需要进行跳转

     

    实现:

    java文件:SessionIterceptor.java

     

    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

    public class SessionIterceptor extends AbstractInterceptor {
     private static final long serialVersionUID = 7579862236766378267L;

    public String intercept(ActionInvocation invocation) throws Exception {
       ActionContext ctx=invocation.getInvocationContext();
             String user=(String)ctx.getSession().get("accountId");

    if(user!=null){
              return invocation.invoke();
              
             }

    //如果超时,返回提示页面
             return "loginPage";

    }
    }

    =========================================================================

    配置文件:

    struts.xml

    目前此文件包含3个package:
    1、iterceptor,定义了session超时的拦截器
    2、noIterceptor,以后session超时不需要做处理的页面配置到此包下
    3、nscloud,所有session超时需要跳转到登录页面的页面配置到此包下
     
    <!-- session超时拦截器 -->
     <package name="iterceptor" namespace="/" extends="struts-default">
      <interceptors>
                <!-- 自定义拦截器 -->
                <interceptor name="permission" class="com.neusoft.common.action.SessionIterceptor" />
                <!-- 配制默许的拦截器到拦截器栈 -->
                <interceptor-stack name="permissionStack">
                    <!-- 此处先后顺序没影响-->
                    <interceptor-ref name="permission" />
                    <interceptor-ref name="defaultStack" />
                </interceptor-stack>
            </interceptors>
            <!-- 配置默认的拦截器 -->
            <default-interceptor-ref name="permissionStack" />
            <!-- 全局变量,超时返回登录页面 -->
            <global-results>
                <result name="loginPage">/pages/common/jsp/session.jsp</result>
            </global-results>
            <action name="*Action" class="com.neusoft.nsc.common.action.CommonAction" method="{1}">
                <!-- 超时返回登录页面 -->
                <result name="loginPage">/pages/nsc/login/login.jsp</result>
            </action>
     </package>
     
     <!-- session超时不需要返回登录页面的配置文件 -->
     <package  name="noIterceptor" namespace="/" extends="struts-default">
     
    </package>
     
     <!-- session超时返回登录页面的配置文件 -->
     <package name="nscloud" namespace="/" extends="iterceptor">
     
    </package>

     

    ======================================================================================

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

    session.jsp

     

    <%@ page language="java" contentType="text/html; charset=UTF-8"%>
    <%
     String path = request.getContextPath();
     String basePath = request.getScheme() + "://"
       + request.getServerName() + ":" + request.getServerPort()
       + path + "/";
    %>
    <html>
     <head>
      <script type="text/javascript">
       window.top.location.href="<%=basePath%>pages/nsc/login/login.jsp";
      </script>
     </head>
    </html>

     

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

  • 相关阅读:
    JavaWeb学习笔记(3)
    JavaWeb学习笔记(2)
    JavaWeb学习笔记(1)
    Java学习笔记(20)
    Java学习笔记(19)
    Java学习笔记(18)
    Java学习笔记(17)
    Java学习笔记(16)
    Java学习笔记(15)
    Java学习笔记(14)
  • 原文地址:https://www.cnblogs.com/shanmao/p/3477522.html
Copyright © 2020-2023  润新知