ASP.Net MVC Filter認証ユーザーログイン

3540 ワード

一、Filterとは何か
    ASP.NetMVCモードに付属するフィルタFilterは、Authorization(ライセンス)、Action(動作)、Result(結果)、Exception(異常)の4種類のフィルタタイプをサポートする宣言プログラミング方式です.
フィルタの種類
インタフェース
説明
Authorization
IAuthorizationFilter
このタイプ(またはフィルタ)は、コントローラまたはコントローラへのアクセスを制限する動作方法です.
Exception
IExceptionFilter
動作を指定するために使用されます.この指定された動作は、動作方法またはコントローラから放出された例外を処理します.
Action
IActionFilter
動作に入る前または後の処理
Result
IResultFilter
結果を返す前または後の処理
 
しかし、デフォルトで実装されるフィルタは、ActionFilter(メソッド)、Authorize(ライセンス)、HandleError(エラー処理)の3種類しかありません.各種情報は以下の表に示す.
フィルタ
クラス名
実装インタフェース
説明
ActionFilter
AuthorizeAttribute
IAuthorizationFilter
このタイプ(またはフィルタ)は、コントローラまたはコントローラへのアクセスを制限する動作方法です.
HandleError
HandleErrorAttribute
IExceptionFilter
動作を指定するために使用されます.この指定された動作は、動作方法またはコントローラから放出された例外を処理します.
ツールバーの
ActionFilterAttribute
IActionFilterとIresultFilter
メソッドは、前/後の処理を実行する.結果の前または後の処理を返します.
3つ目のカスタムフィルタは、必ずActionFilterAttributeを継承します.ASPです.NETMVCFrameworkが提供するベースクラスActionFilterAttribute.このクラスはIActionFilterとIresultFilterインタフェースを実現している.ActionFilterAttributeでは、次の方法で書き換えることができます.
OnActionExecuting
コントロールアクションの実行前に呼び出す
OnActionExecuted
コントロールアクション実行後に呼び出す
OnResultExecuting
コントロールアクションresultが実行される前に呼び出す
OnResultExecuted
コントローラaction result実行後に呼び出す

各ページがクッキーにユーザー情報が保存されているかどうかを検証することを実現し、期限切れのユーザー情報は失効し、ログインページをジャンプします.全体的な考え方は、まずログインコントローラでページからのUser情報をクッキーに保存し、クッキーの失効時間を設定することです.各Controllerのメソッド実行は、まずFilterを実行し、クッキーにユーザー情報が保存されているかどうかを確認します. 
二、実践
まずユーザ名情報をクッキーに保存し,ログインしたControllerでクッキーを作成する.クッキーはキー値対モード(key,value)である.
#region       cookie 
        /// 
        ///   Cookie
        /// 
        /// 
        public void CreateCookie()   // Action   cookie       
        {
            HttpCookie UserName = new HttpCookie("name");
            UserName.Value = Request["userName"];
            System.Web.HttpContext.Current.Response.SetCookie(UserName);
            //cookie    
            UserName.Expires = DateTime.Now.AddHours(10);
        }
        #endregion

次に、FilterでカスタムのLoginFilterを作成し、クッキーにユーザー情報があるかどうかを確認します.
    //        ,      ,      ,  ,      
    [AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = true)]
    public class LoginFilter:ActionFilterAttribute
    {
        /// 
        /// OnActionExecuting Action      
        /// 
        /// 
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            //  Cookie         
            HttpCookie cookieName = System.Web.HttpContext.Current.Request.Cookies.Get("name");
            if ( cookieName == null)
            {
                filterContext.Result = new RedirectResult("/Login/Index");
            }
        }
    }

最後に、各コントローラにカスタムFilterのラベルを付ける
    [LoginFilter]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Message = "     ASP.NET MVC!";

            return View();
        }
       

Controllerにラベルを付け、下のすべてのメソッドを実行する前にFilterを先に実行し、フィルタリングを実現します.自分の業務に基づいて、ラベルを調整することができます.あるいはグローバルなGlobalを使用します.
今回のFilter学習は、私の欠点を暴露し、バグをデバッグし、赤い波の線に出会ったらctrl+zを取り消し、問題を真剣に見て、問題を解決するのではなく、問題を解決します.セルフテスト!