.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過濾器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM