欢迎您来到“名字什么都是浮云”的博客空间!

MVC基类控制器的会话丢失重新登录权限过滤

SSOController.cs请查看以下代码:

public class SSOController : Controller
    {
        public const string Token = "Token";
 
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var token = "";
 
            //Token by QueryString
            var request = filterContext.HttpContext.Request;
            if (request.QueryString[Token] != null)
            {
                token = request.QueryString[Token];
                var cookie = new HttpCookie(Token, token)
                {
                    Expires = DateTime.Now.AddDays(10)
                };
                filterContext.HttpContext.Response.Cookies.Add(cookie);
            }
            else if (request.Cookies[Token] != null//从Cookie读取Token
            {
                token = request.Cookies[Token].Value;
            }
 
            if (string.IsNullOrEmpty(token))
            {
                //直接登录
                filterContext.Result = LoginResult("");
                return;
            }
            else
            {
                //验证
                if (AuthUtil.CheckLogin(token, request.RawUrl) == false)
                {
                    //会话丢失,跳转到登录页面
                    filterContext.Result = LoginResult("");
                    return;
                }
            }
 
            base.OnActionExecuting(filterContext);
        }
 
        public virtual ActionResult LoginResult(string username)
        {
            return new RedirectResult("/Login/Index");
        }
    }

  

<a title="ActionExecutingContext" href="http://www.cnblogs.com/licin/p/6542160.html" target="_blank">ActionExecutingContext</a>类,已经说明过了,下面我们看看Token是怎么回事:

我们先分析Token来自于哪里,按照上图分析,Token一部分来自于uri,一部分来自于Cookie客户端信息.<br>如果是uri请求的,会重新写入cookie信息,我们再看看这个

检查Token是不是等于当前的请求request中的url中的Token,如果不是,说明会话丢失。然后下面设置返回结果重新登录。

 
 
posted @   名字什么都是浮云  阅读(483)  评论(0编辑  收藏  举报
编辑推荐:
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示