• .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 }

      

  • 相关阅读:
    ubuntu安装sublime无工具栏解决办法
    ubuntu安装eclipse无工具栏解决办法
    数据库设计
    cglib代理
    多线程简单实例(3)线程池
    多线程简单实例(2)生产者和消费者
    STL之迭代器(iterator)
    STL之vector
    “由于这台计算机没有终端服务器客户端访问许可证”解决方案
    STL之容器(containers) 简介
  • 原文地址:https://www.cnblogs.com/xy0710/p/15670993.html
Copyright © 2020-2023  润新知