.NET Core MVC 登陆或权限过滤器

 1 using AuthorizationCenter.Define;
 2 using Microsoft.AspNetCore.Http;
 3 using Microsoft.AspNetCore.Mvc;
 4 using Microsoft.AspNetCore.Mvc.Controllers;
 5 using Microsoft.AspNetCore.Mvc.Filters;
 6 using System.Linq;
 7 
 8 namespace AuthorizationCenter.Filters
 9 {
10     /// <summary>
11     /// 登陆过滤器
12     /// </summary>
13     public class SignFilter : ActionFilterAttribute
14     {
15         /// <summary>
16         /// 当动作执行中 
17         /// </summary>
18         /// <param name="context"></param>
19         public override void OnActionExecuting(ActionExecutingContext context)
20         {
21             // 判断是否检查登陆
22             var noNeedCheck = false;
23             if (context.ActionDescriptor is ControllerActionDescriptor controllerActionDescriptor)
24             {
25                 noNeedCheck = controllerActionDescriptor.MethodInfo.GetCustomAttributes(inherit: true)
26                   .Any(a => a.GetType().Equals(typeof(NoSignAttribute)));
27             }
28             if (noNeedCheck) return;
29 
30             // 检查登陆 - 在SignIn中判断用户合法性,将登陆信息保存在Session中,在SignOut中移除登陆信息
31             // 获取登陆信息 - 这里采用Session来保存登陆信息 -- Constants是字符串常量池
32             var userid = context.HttpContext.Session.GetString(Constants.USERID);
33             var signname = context.HttpContext.Session.GetString(Constants.SIGNNAME);
34             var password = context.HttpContext.Session.GetString(Constants.PASSWORD);
35 
36             // 检查登陆信息
37             if (userid == null && signname == null)
38             {
39                 // 用户未登陆 - 跳转到登陆界面
40                 context.Result = new RedirectResult("/Sign/Index");
41             }
42             base.OnActionExecuting(context);
43         }
44     }
45     /// <summary>
46     /// 不需要登陆的地方加个特性
47     /// </summary>
48     public class NoSignAttribute : ActionFilterAttribute { }
49 }

不需要登陆的地方加个特性

[NoSign]
public IActionResult SignIn()
{
    // TODO
}

需要注册过滤器

1 public void ConfigureServices(IServiceCollection services)
2 {
3     services.AddMvc(config =>config.Filters.Add(typeof(SignFilter))).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
4     // Do Others
5 }

参考:
.net core 登入全局验证过滤器
Asp.net Core过滤器

posted @ 2020-02-16 13:12  星火卓越  阅读(1635)  评论(0编辑  收藏  举报