【SSO】--單點登入之過濾器(filter)

ZeroWM發表於2015-07-19

    在單點登入的探索中,用到一個知識點:過濾器(filter)。常見的幾種驗證:Authorization filters,驗證使用者是否有許可權訪問頁面;Action Filter,驗證使用者登入的時候是否使用者資訊存在;異常處理,比如session過期後可以返回登入頁面等等。


一、Filter包含什麼?


filter主要分為四種,遍佈於MVC,從頁面請求到授權,到訪問資源的各個階段。

Authorization filters:用於處理驗證處理相關的操作

Action filters:在Controller中Action處理的開始和結束做攔截操作

Result filters:在View呈現前和呈現後做處理

Exception filters:只要是新增了Exception Filter的請求中出現異常,都會被攔截。


下面是filter在MVC中的作用順序:




二、Filter的小demo


子系統登入許可權前,需要經過filter過濾,看是否能查到本地的cookie值進行驗證。如下是filter中程式碼:

  public class MemberValidationAttribute:AuthorizeAttribute
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            //讀取使用者登入許可權和資訊
            var memberValidation = filterContext.HttpContext.Request.Cookies.Get("selfUserInfo");
            //如果為空,就跳轉到登入頁;如果不為空,就返回一開始請求的頁面
            if (memberValidation == null)
            {
                filterContext.Result=new RedirectToRouteResult(new RouteValueDictionary
                    (new {controller="Account",aciton="LogOn"
                    }));
                return; 
            }
            return;
            
        }

    }


子系統只需要在ActionResult上面打一個[MemberValidation]即可在登入的時候訪問filter。

        [MemberValidation]
        
        public ActionResult ChangePassword()
        {
            return View();
        }

三、感受

    一個知識只有給別人講出來,而且講懂了,才是真正的學會了。不要把所有的事情想的那麼難,去做就好了。




相關文章