我目前正在添加一个操作过滤器来处理我们网站中的会话超时:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
public class SsoExpireFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if(!(filterContext.Controller.GetType() == typeof(HomeController)
&& filterContext.ActionDescriptor.ActionName == MVC.Home.ActionNames.Index))
{
if(filterContext.ActionDescriptor.ActionName != MVC.Home.ActionNames.TimeoutRedirect.ToLower())
{
if (!Thread.CurrentPrincipal.Identity.IsAuthenticated)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
filterContext.Result = new JsonResult { Data = "_Logon_" };
else
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{"Controller", "Home"},
{"Action", "TimeoutRedirect"}
});
}
}
}
base.OnActionExecuting(filterContext);
}
}
我期望 Principal.Identity 上的 IsAuthenticated 标志在超时后为假,但是当它在动作过滤器中被击中时它仍然是真的。(我知道会话已经超时,因为我在 Global.asax 中的 Session_End 上设置了一个断点,这是第一个命中的)。
我们网站的身份验证由公司标准的“单点登录”dll 处理,所以我猜这是在设置单独的身份验证超时,这听起来可能吗?
任何帮助表示赞赏。