繁体   English   中英

ASP.NET MVC 3中的AuthorizeAttribute和输出缓存

[英]AuthorizeAttribute and output caching in asp.net mvc 3

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

 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输出缓存中发挥良好的作用。 当输出缓存模块即将提供来自缓存的响应时,它使用鲜为人知的outputcaching API进行注册以运行自身。 这样可以防止未经授权的用户获取缓存的内容。

看完这篇文章后,我仍然不清楚-我是否应该做一些有关缓存的事情。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM