一般登录验证的过滤器中,使用验证过滤器的Redirect方法,将请求重定向到指定的URL。但是如果我们要访问的页面是一个嵌套在框架页中的iframe页面时,这种重定向只会对iframe页面凑效,也就是会将iframe也重定向到登录页,这样就有违我们的目的了。所以我就尝试了很多方法来实现让整个页面重定向到登录页的目标,接下里我就来分享一下我的心路历程~~如果想看解决方法,可以直接拉到最后,忽略我的啰啰嗦嗦~~

首先,我尝试了替换掉Redirect,改用了Write方法,意在将指定字符串写入HTTP响应输出流,如下:

public class HandlerLoginAttribute : AuthorizeAttribute
{
public bool Ignore = true;
public HandlerLoginAttribute(bool ignore = true)
{
Ignore = ignore;
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (Ignore == false)
{
return;
}
if (OperatorProvider.Provider.GetCurrent() == null)
{
WebHelper.WriteCookie("login_error", "overdue");
          //将指定字符串写入HTTP响应输出流
filterContext.HttpContext.Response.Write("<script>top.location.href = '/Login/Index';</script>");
}
}
}

这里直接往输出流添加一段脚本——<script>top.location.href = "/Login/Index";</script>,把最顶层页面的链接替换成登录页的地址,这个方法我在本地验证是可以凑效的,可是把网站发布后部署到IIS上就无用了,问了我师父也是不明就里,他说这种输出流的响应不稳定,可能有的时候能识别到有的时候识别不到,我想反正这个方法也不凑效,那也没必要去深究了,哈哈 ,原谅我的咸鱼精神,如果有小伙伴知道为什么,欢迎分享呀。

总之,这个方法是pass掉了。

蓝后,我就又去求助师父了,师父说:可以通过过滤器返回一个标识,前端js获取标识之后跳转登录页。因为是在iframe子页面请求controller被拦截了,但是iframe框架页得不到被拦截的信息,在js中就可以通过父子页面通信处理这个问题了。

我仿佛明白了什么,但是潜意识觉得这个有点麻烦,然后师父又说了:你要是有时间的话,就把这个项目重构掉吧!

我。。。。。。。

我内心是拒绝的,发挥咸鱼精神,我锲而不舍的去搜索各种方法,不断尝试,终于发现了一个相当可行的方法,具体看代码:

划重点啦!!!

第一步,过滤器中依然使用Redirect方法进行重定向;

public class HandlerLoginAttribute : AuthorizeAttribute
{
public bool Ignore = true;
public HandlerLoginAttribute(bool ignore = true)
{
Ignore = ignore;
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (Ignore == false)
{
return;
}
if (OperatorProvider.Provider.GetCurrent() == null)
{
WebHelper.WriteCookie("login_error", "overdue");//将请求重定向到指定的URL
filterContext.HttpContext.Response.Redirect("/Login/Index");
return;
}
}
}

第二步,在/Login/Index页面做限制,通过过滤器将iframe页面重定向到登录页面,然后在登录页脚本中判断当前页是不是顶层页,如果不是,则将当前iframe页面重定向为顶层页。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<div class="wrapper">测试</div>
<script type="text/javascript">
$(function () {
if (window != top) {
top.location.href = location.href;
}
});
</script>
</body>
</html>

这种方法在本地运行时没有问题的,然后我也发布之后部署到了服务器的IIS上,也同样行得通,我的目的就此达成啦~~

撒花~~撒花~~

当然,作为一个小菜鸟,也是参考了很多别人的东西,这个方法也算是个笨方法吧,如果大家有更好的方法,也欢迎多多评论交流~~

感谢各位观看,献花~

/****************************我是可爱的分割线*********************************/

Asp.net MVC访问框架页中嵌套的iframe页面时,如果session或cookie过期,登录验证超时怎样自动跳转到登录页的更多相关文章

  1. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证)

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证) ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框 ...

  2. php在没有登录的情况下自动跳转到登录页

    <?php namespace Home\Controller; use Think\Controller; class BaseController extends Controller{ / ...

  3. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1)框架搭建 前言:这 ...

  4. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

  5. ASP.NET MVC+EF框架+EasyUI实现权限管理系列

    http://www.cnblogs.com/hanyinglong/archive/2013/03/22/2976478.html ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开 ...

  6. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架 ...

  7. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2 ...

  8. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(11)-验证码实现和底层修改

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(11)-验证码实现和底层修改 ASP.NET MVC+EF框架+EasyUI实现权限管系列  (开篇)   (1):框架搭建    ...

  9. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(7)-DBSession的封装

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(7)-DBSession的封装 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    ...

随机推荐

  1. 利用shell脚本去备份幸运28源码搭建下载所指定的数据库

    #! /bin/bash幸运28源码搭建下载Q[115288oo99]logintool=/home/yx/server/mysql/mysql/bin/mysqldumptool=/home/yx/ ...

  2. CF1148D-Dirty Deeds Done Dirt Cheap

    这轮CF怎么充满了替身啊233(这是场只有替身使者才能看见的比赛) 题解可以看官方的 这里就是记录下自己当初是怎么没做上的233 忽视掉了分类后pair本身就会带有的性质(a<b or a> ...

  3. 18清明校内测试T1

    消失的数字(number) Time Limit:1000ms   Memory Limit:128MB 题目描述 rsy拥有n个数,这n个数分别是a1,a2,…,an. 后来出现了一个熊孩子zhw, ...

  4. 匈牙利算法求最大匹配(HDU-4185 Oil Skimming)

    如下图:要求最多可以凑成多少对对象 大佬博客: https://blog.csdn.net/cillyb/article/details/55511666 https://blog.csdn.net/ ...

  5. 第十五节:pandas之concat()级联

    Pandas 提供了concat()函数可以轻松的将Series.DataFrame对象进行合并在一起. pandas.concat(obj , axis=0 , join="inner&q ...

  6. 深入浅出了解HTTP协议

    深入浅出了解HTTP协议

  7. 【codeforces 701C】They Are Everywhere

    [题目链接]:http://codeforces.com/contest/701/problem/C [题意] 让你选择一段最短的区间; 使得这段区间里面包含所有种类的字符; [题解] 之前都是用二分 ...

  8. EXt js 学习笔记总结

    1. get . fly. getCmp .getBody .getDoc .getDom..    get-----ExtJs获取节点.dom.提供缓存机制  Ext.Element类是Ext对DO ...

  9. 算是帮华仔写的撸JSON文件,然后发到我的REST接口的PYTHON代码

    很久没有写过类似的代码了,感觉好陌生... #!/usr/bin/python #coding:utf-8 import json import getopt import sys import re ...

  10. [bzoj2213][Poi2011]Difference_动态规划

    Difference bzoj-2213 Poi-2011 题目大意:已知一个长度为n的由小写字母组成的字符串,求其中连续的一段,满足该段中出现最多的字母出现的个数减去该段中出现最少的字母出现的个数最 ...