我正在考虑编写自定义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将自己注册为运行 该 缓存。这可以防止未经授权的用户获取缓存内容。
阅读完之后,我仍然不清楚 - 我是否应该做一些有关缓存的事情。
答案 0 :(得分:0)
不,你没事。始终使用AuthorizeAttribute。输出缓存可以缓存授权用户的内容,但绝不会将其显示给未经授权的用户,反之亦然。