ASP.NET MVC AuthorizeAttribute
AuthorizeAttribute 是 ASP.NET MVC 的过滤器之一,又称为认证和授权过滤器,即判断登录与否授权与否。当为某个控制器或动作方法附加该特性时,没有登录或授权的账户是不能访问对应的控制器或动作方法的。
在进入一个附加Authorize特性的控制器或动作之前,首先执行的是 AuthorizeAttribute
类的 OnAuthorization(AuthorizationContext filterContext)
方法,接着 OnAuthorization()
会去调用其他诸如 AuthorizeCore()
方法。
//特性,用于标记在授权期间要跳过System.Web.Mvc.AuthorizeAttribute的控制器和操作
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited=true, AllowMultiple=true)]
public class AuthorizeAttribute:FilterAttribute, IAuthorizationFilter
{
public AuthorizeAttribute();
public string Roles { get; set; }
public override object TypeId{ get; }
public string Users { get; set; }
/*AuthorizeAttribute的OnAuthorization方法内部调用AuthorizeCore方法,实现验证和授权逻辑。*/
protected virtual bool AuthorizeCore(HttpContextBase httpContext);
/*若AuthorizeCore返回false才会执行HandleUnauthorizedRequest*/
protected virtual void HandleUnauthorizedRequest(AuthorizationContext filterContext);
public virtual void OnAuthorization(AuthorizationContext filterContext);
protected virtual HttpValidationStatus OnCacheAuthorization(HttpContextBase httpContext);
}
AuthorizeAttribute
的 OnAuthorization()
方法内部调用了 AuthorizeCore()
, 这个方法是实现验证和授权逻辑的地方,若这个方法返回为 true
则表示授权成功。若返回为 false
则表示授权失败,会给上下文设置一个 HttpUnauthorizedResult
,这个 ActionResult
执行的结果是向浏览器返回一个 404 状态码,通常是跳转到一个登陆页面,可以重写 AuthorizeAttribute
的 HandlerUnauthorizedRequest
跳转到相应的页面。
在ASP.NET MVC中使用身份验证和权限控制,但部分页面是可以匿名访问的,使用AllowAnonymous属性可指定需要匿名访问的控制器,从而跳过身份验证。
Web应用程序要求在用户登录之后才授予其受限制内容的访问权限,某些应用中,即时登录用户,也会限制它们查看的内容或可以编辑的字段。要限制对ASP.NET MVC视图的访问,可限制对呈现视图的操作方法的访问。为此,MVC框架提供AuthorizeAttribute类。
上一篇: 三国的后期都有哪些厉害的将领呢?
下一篇: ASP.NET MVC特性