MVC5的AuthorizeAttribute詳解


現今大多數的網站尤其是購物網站都要求你登錄后才能繼續操作,當你匿名的將商品放入購物車后,不可能匿名購買這時可以轉到登錄界面讓用戶進行登錄驗證。

適用系統自帶的過濾器

  1. MVC5只要將屬性[Authorize]置於相關的action之前就行,那么在調用Buy action之前,就會運用Authorize過濾器
1         [Authorize]
2         public ActionResult Buy(int id)
3         {
4            //其它購買邏輯代碼放在這里
5             
6         }

 

  2. 也可以將屬性[Authorize]置於整個Controller之上。這樣位於此控制器下的所有action就都運用了此過濾器。

    [Authorize]
    public class UserController : Controller
    {
       //一些action
     }

   3. 也可以將Authorize應用到全部的應用程序的范圍類,要使AuthorizeAttribute成為全程序的過濾器,只要將其加入全局過濾器集合RegisterGlobalFilters方法,這個方法位於\App_Start\FilterConfig.cs:

public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
filters.Add(new System.Web.Mvc.AuthorizeAttribute());
filters.Add(new HandleErrorAttribute());
}

  4. 如果我們允許部分的控制器或者action允許匿名訪問怎么辦?只需要在相應的控制器或者action上添加屬性[AllowAnonymous]

//
// GET: /Account/Login
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}

  注意:

  全局控制器的應用只適用於MVC的Controller和Action,對於Web Forms,靜態頁面,和其它的HTTP handlers 都不適用。

關於使用自己的過濾器:(以下引用kuangkro的博客:http://www.cnblogs.com/xlhblogs/p/3349972.html

我們不一定要用MVC默認的Authorize授權驗證規則,規則可以自己來定,自定義授權過濾器可以繼承AuthorizeAttribute這個類,這個類里面有兩個方法是要重寫的

  •          bool AuthorizeCore(HttpContextBase httpContext):這里主要是授權驗證的邏輯處理,返回true的則是通過授權,返回了false則不是。
  •          void HandleUnauthorizedRequest(AuthorizationContext filterContext):這個方法是處理授權失敗的事情。

這里就定義了一個比較騎呢的授權處理器,當請求的時候剛好是偶數分鍾的,就通過可以獲得授權,反之則不通過。當授權失敗的時候,就會跳轉到登陸頁面了。

public class MyAuthorizeAttribute:AuthorizeAttribute
    {
        
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            //return base.AuthorizeCore(httpContext);
            return DateTime.Now.Minute % 2 == 0
        }

        
        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            filterContext.HttpContext.Response.Redirect("/Customer/Login");
            
            //base.HandleUnauthorizedRequest(filterContext);
        }
    }

然后用到一個行為方法上,

        [MyAuthorize]
        public ActionResult ShowDetail()
        {
            return View();
        }

每當偶數分鍾的時候就可以訪問得到這個ShowDetail的視圖,否則就會跳到了登陸頁面了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM