在asp.net mvc 3中AuthorizeAttribute和输出缓存

时间:2011-09-28 12:49:56

标签: c# asp.net-mvc asp.net-mvc-3

我正在考虑编写自定义authorize属性,我不确定输出缓存。 属性看起来像这样:

 public class AuthorizeWithAreasAttribute : AuthorizeAttribute
{        
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        if (!filterContext.HttpContext.User.IsInRole(Roles))
        {
            var urlHelper = new UrlHelper(filterContext.RequestContext);
            filterContext.HttpContext.Response.Redirect(urlHelper.Action(ControllerName, ActionName, new { area = AreaName }));
        }
        base.OnAuthorization(filterContext);
    }

    public string ControllerName { get; set; }

    public string ActionName { get; set; }

    public string AreaName { get; set; }
}

我从以下专业asp.net mvc:

中引用了以下内容
  

那么,如果将授权过滤器与[OutputCache]结合使用会发生什么?在最坏的情况下,你   冒着授权用户第一次访问您的操作的风险,导致它很快就会运行并被缓存   然后是未经授权的用户,即使他们未获得授权,也会获得缓存的输出。   幸运的是,ASP.NET MVC团队已经预见到了这个问题,并为AuthorizeAttribute添加了特殊的逻辑,使其能够很好地与ASP.NET输出缓存配合使用。它使用鲜为人知的输出缓存   当输出缓存模块即将提供响应时,API将自己注册为运行   该   缓存。这可以防止未经授权的用户获取缓存内容。

阅读完之后,我仍然不清楚 - 我是否应该做一些有关缓存的事情。

1 个答案:

答案 0 :(得分:0)

不,你没事。始终使用AuthorizeAttribute。输出缓存可以缓存授权用户的内容,但绝不会将其显示给未经授权的用户,反之亦然。