需求: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

struts2拦截器实现session超时返回登录页面(iframe下跳转到其父页面)的更多相关文章

  1. 基于SSH2框架Struts2拦截器的登录验证实现(转)

        大象在这里假设你已经弄清楚了Struts2拦截器的基本概念,可以进入实际运用了.那么我们在之前的基础上只需要做下小小的改变,就可以使用Struts2的拦截器机制实现登录的验证.     修改数 ...

  2. Struts2拦截器登录验证

    Struts2拦截器 Struts2拦截器的概念和Spring Mvc拦截器一样. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截 ...

  3. 防止未登录用户操作—struts2拦截器简单实现(转)

    原文地址:http://blog.csdn.net/zhutulang/article/details/38351629 尊重原创,请访问原地址 一般,我们的web应用都是只有在用户登录之后才允许操作 ...

  4. Struts2拦截器 解决登录问题

    一.了解Struts2 拦截器[Interceptor] 拦截器的工作原理如图  拦截器是由每一个action请求(request)都包装在一系列的拦截器的内部,通过redirectAction再一次 ...

  5. 浅谈Struts2拦截器的原理与实现

    拦截器与过滤器           拦截器是对调用的Action起作用,它提供了一种机制可以使开发者定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行.同时也是提供了 ...

  6. Struts2拦截器和标签

    一.struts2拦截器 1.struts2是框架,封装了很多的功能,struts2里面封装的功能都是在拦截器里面. 2 struts2里面封装了很多的功能,有很多拦截器,不是每次这些拦截器都执行,每 ...

  7. 深入分析JavaWeb Item47 -- Struts2拦截器与文件上传下载

    一.struts2中的拦截器(框架功能核心) 1.过滤器VS拦截器 过滤器VS拦截器功能是一回事. 过滤器是Servlet规范中的技术,能够对请求和响应进行过滤. 拦截器是Struts2框架中的技术. ...

  8. struts2拦截器(四)

    struts2拦截器原理: 当请求action时,struts2会查找配置文件,并根据配置实例化相对的 拦截器对象,然后串成一个列表,然后一个一个的调用列表中的拦截器. 比如:某些页面必须登录才可以访 ...

  9. Struts2拦截器的使用 (详解)

    Struts2拦截器的使用 (详解) 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈default ...

随机推荐

  1. 【Valid Sudoku】cpp

    题目: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could ...

  2. 移动web前端开发小结

    注意:Chrome模拟手机的显示的界面是有误差的,强烈建议一定要在真机测试自己的移动端页面(以移动端页面为准). 1.页面高度渲染错误,页面的高度是否包含了导航,(华为手机就是偏偏有底部菜单) 设置窗 ...

  3. Python+Selenium练习篇之19-多窗口之间切换

    本文来介绍如何处理driver在多窗口之间切换,想一下这样的场景,在页面A点击一个连接,会触发在新Tab或者新窗口打开页面B,由于之前的driver实例对象在页面A,但是你接下来的脚本是操作页面B的元 ...

  4. Leetcode 540.有序数组中的单一元素

    有序数组中的单一元素 给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数. 示例 1: 输入: [1,1,2,3,3,4,4,8,8] 输出: 2 示例 2: 输入 ...

  5. 爬虫:Scrapy4 - Spiders

    Spider 类定义了如何爬取某个(或某些)网站.包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item).Spider就是定义爬取的动作以及分析某个网页(或者有些网 ...

  6. Spring框架annotation实现IOC介绍

    Spring学习笔记(三) 续Spring 学习笔记(二)之后,对Spring框架的annotation实现方法进行整理 本文目录 @Autowire 1 @Autowire+@Qualifier t ...

  7. nyoj 题目6 喷水装置

    喷水装置(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以 ...

  8. UNet简单案例讲解

    1.创建文件夹: 2.创建一个空物体,添加如下组件: Network Manager(网络管理组件): Network Manager HUD(提供一个UI): 3.创建如下模型,并设置为预制体: 给 ...

  9. Servlet+Json代码

    package com.brmoney.servlet; import java.io.IOException; import java.io.PrintWriter; import java.uti ...

  10. C#添加编译时间

    using System.Reflection;using UnityEngine;using System.Collections; [assembly:AssemblyVersion( " ...