[英]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.