【问题标题】:Using AttributeAuthorization For Global Filter对全局过滤器使用 AttributeAuthorization
【发布时间】:2016-10-28 20:08:50
【问题描述】:

我已经注册了一个全局过滤器来授权需要 cookie 的请求,但我有一个需要公开的控制器,因此我将 [AllowAnonymous] 属性添加到控制器方法,但我的过滤器仍然会触发并继续重定向。我不确定解决此问题的最佳方法。

是否需要修改我的 onauthorization 方法以查找 [AllowAnonymous] 属性?

  public class CookieAuthFilter : AuthorizeAttribute
        {
            public override void OnAuthorization(AuthorizationContext filterContext)
            {
                HttpCookie cookie = filterContext.HttpContext.Request.Cookies.Get("token");
                if (cookie == null)
                {
                    filterContext.Result = new RedirectResult("/Home/Index");
                }

            }
        }

【问题讨论】:

标签: asp.net-mvc


【解决方案1】:

是否需要修改我的 onauthorization 方法以查找 [AllowAnonymous] 属性?

你可以,但只是移动你的逻辑会更简单,这样基本的OnAuthorize 方法(包含logic to scan for [AllowAnonymous])不会被修改。

public class CookieAuthFilter : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        return httpContext.Request.Cookies.Get("token") != null;
    }

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        filterContext.Result = new RedirectResult("/Home/Index");
    }
}

如果用户被授权,最好使用AuthorizeCore返回true,并使用HandleUnauthorizedRequest进行重定向。

OnAuthorization 还包含一些 additional logic to help it deal with output caching,您应该保留它们。

【讨论】:

  • 非常感谢。完美运行。
猜你喜欢
  • 2014-09-20
  • 2019-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-30
  • 2012-05-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多