zoukankan      html  css  js  c++  java
  • .Net Core MVC全局过滤器验证是否需要登录

    1.新增全局登录过滤器LoginCheckAttribute

     1 public class LoginCheckAttribute: ActionFilterAttribute
     2 {
     3   public override void OnActionExecuting(ActionExecutingContext filterContext) 
     4   {
     5       // 判断是否检查登陆
     6       var noNeedCheck = false;
     7       string msg = filterContext.HttpContext.Request.Path;
     8 
     9       if (filterContext.ActionDescriptor is ControllerActionDescriptor controllerActionDescriptor)
    10       {
    11         noNeedCheck = controllerActionDescriptor.MethodInfo.GetCustomAttributes(inherit: true)
    12                       .Any(a => a.GetType().Equals(typeof(NoNeedLoginAttribute)));
    13       }
    14       if (noNeedCheck) return;
    15 
    16       bool isLogin = filterContext.HttpContext.Session.GetString("_Name") !=null?true:false;//你的验证是否登录方法
    17       if (!isLogin)
    18       {
    19         filterContext.HttpContext.Response.Redirect("/Account/Login", true);//跳转登录页面
    20       }
    21 
    22       base.OnActionExecuting(filterContext);
    23     }
    24 }

    2.新增无需登录过滤器NoNeedLoginAttribute

    1 public class NoNeedLoginAttribute: ActionFilterAttribute
    2 {
    3   public override void OnActionExecuting(ActionExecutingContext filterContext)
    4    {
    5     base.OnActionExecuting(filterContext);
    6 
    7   }
    8 }

    3.Startup.cs页面添加配置

    1 public void ConfigureServices(IServiceCollection services)
    2 {
    3   //全局过滤器
    4    services.AddMvc(config => config.Filters.Add(new LoginCheckAttribute()));
    5 }

    4.控制器中使用

    1 public class AccountController : Controller
    2 {
    3     [NoNeedLogin]
    4      public IActionResult Login()
    5      {
    6          return View();
    7      }        
    8 }

      

    PS:刚开始学习.net Core 有不对的地方,请大家帮忙指正。另外有没有直接在控制器上过滤的,有知道的朋友请在评论中帮忙解答下,谢谢! 

    例:

     1 public class LoginCheckAttribute: ActionFilterAttribute
     2     {
     3         public bool IsChecked { get; set; }
     4         public override void OnActionExecuting(ActionExecutingContext filterContext) 
     5         {
     6             
     7             if (IsChecked) 
     8             {
     9                 bool isLogin = filterContext.HpptContext.Session.GetString("_Name")!=null? true:false;//你的验证是否登录方法
    10                 if (!isLogin)
    11                 {
    12                     filterContext.HttpContext.Response.Redirect("/Account/Login", false);
    13                 }
    14             }
    15 
    16             base.OnActionExecuting(filterContext);
    17         }
    18     }
    19 
    20 
    21 //Startup.cs页面添加配置
    22 public void ConfigureServices(IServiceCollection services)
    23 {
    24   //全局过滤器
    25    services.AddMvc(config => config.Filters.Add(new LoginCheckAttribute(){IsChecked = true}));
    26 }
    27 
    28 
    29 //控制器
    30 //1.该控制器不需要验证登录
    31 [LoginCheck(IsChecked = false)]
    32 public class AccountController : Controller
    33 {
    34     public IActionResult Login()
    35     {
    36         return View();
    37     }        
    38 }
    39 
    40 
    41 //2.该控制器需要验证是否登录
    42 public class UserController : Controller
    43 {
    44     public IActionResult Index()
    45     {
    46         return View();
    47     }        
    48 }

      

  • 相关阅读:
    sizeof和strlen的区别
    备注
    将一个正整数分解质因数
    malloc和new有什么区别
    用C来实现内存池
    句柄和指针的区别和联系是什么?
    c/c++ 宏中"#"和"##"的用法
    手机上网的原理
    数据类型转换(转自CSDN)
    vc debug和Release的切换
  • 原文地址:https://www.cnblogs.com/xy0710/p/15670993.html
Copyright © 2011-2022 走看看