当前位置: 首页 > news >正文

Asp.Net Core 鉴权授权

原文链接: https://blog.csdn.net/Fanbin168/article/details/112431155

以前我们做登陆判断是一般情况是通过实现IAuthorizationFilter 这个过滤器来做的

public class CustomAuthorizationFilterAttribute : Attribute, IAuthorizationFilter
{public void OnAuthorization(AuthorizationFilterContext context){//如果方法上面标记了AllowAnonymous特性,则跳过登录校验-以及权限检查if (context.ActionDescriptor.EndpointMetadata.Any(item => item is AllowAnonymousAttribute)){return;}string userCookie = context.HttpContext.Request.Cookies["CurrentUser"]; //获取Cookieif (userCookie == null){context.Result = new RedirectResult("/Home/Login");  //没有Cookie则跳转到登陆页面}else{return;}}
}

  控制器

namespace AuthWeb.Controllers
{//[CustomAuthorizationFilter]  //可以将自定义的过滤器写打到类上,或者将这个过滤器在Startup->Configuration方法类做全局注册public class HomeController : Controller{private readonly ILogger<HomeController> _logger;public HomeController(ILogger<HomeController> logger){_logger = logger;}public IActionResult Index(){return View();}[AllowAnonymous]public IActionResult LogIn(string name,string password){if ("Admin".Equals(name, StringComparison.CurrentCultureIgnoreCase) && password.Equals("123456"))//用户名忽略大小写比对{base.HttpContext.Response.Cookies.Append("CurrentUser", "Admin", new Microsoft.AspNetCore.Http.CookieOptions{Expires = DateTime.UtcNow.AddMinutes(1)//Cookie 30分钟过期});return new JsonResult(new { Result = true, Message = "登录成功" });}else{return new JsonResult(new { Result = false, Message = "登录失败" });}}}
}

  全局注册CustomAuthorizationFilterAttribute过滤器

public class Startup
{public Startup(IConfiguration configuration){Configuration = configuration;}public IConfiguration Configuration { get; }public void ConfigureServices(IServiceCollection services){services.AddControllersWithViews(options=> {options.Filters.Add(typeof(CustomAuthorizationFilterAttribute));//全局权限检查过滤器});}
}

  

http://www.jsqmd.com/news/2879/

相关文章:

  • 遇到一款无人机,上面有安全模式和强力模式,十分迷惑二者区别,问了技术说是和碰撞指数有关,涨知识
  • 124
  • 我的笔记记录方案
  • AT_arc156_d [ARC156D] Xor Sum 5
  • iOS Provisioning Profile 证书 描述文件
  • 告别多工具切换的低效时代:PandaWiki如何无缝集成企业现有工作流?
  • 计算快速付氏变换FFT前需要加窗函数
  • 直播预告| PostgreSQL 与 IvorySQL 在云原生时代的演进与实践
  • 压垮项目经理的“三座大山”:时间、成本、质量的生存法则与破局工具
  • 最新微信机器人开发教程
  • 金蝶AAS (Apusic Application Server) v10 部署SuperMap iServer 2025 详细教程
  • AI智能会话原型解析:知识问答与知识库管理的设计思路(附模版)
  • Linux - Nginx 文件访问403 forbidden = 授权 chmod -R 777 文件名称
  • 阻抗匹配技术:信号完整性与功率传输的基石​​
  • 学习 React 前,你必须掌握的 10 个 JavaScript 核心概念
  • 二维下标极大数组(二维 map)
  • PySide6 之自定义弹出框
  • 实用指南:数学建模--Topsis(Python)
  • CF932E Team Work
  • HTTP3与HTTP2的性能对比
  • KubeSphere 社区版即将发布:开启云原生新篇章
  • 从零开始:c#如何优雅的操作临时文件/数据?以ASP文件下载为例
  • KDL - 金山云数据湖系统参数
  • 答题互动网页收藏
  • 常见问题解决 --- windows软件运行报错MSVCP140 ATOMIC WAIT.dI
  • 芯脉:面向高速接口的SoC架构与完整性设计<3> - 教程
  • spring boot实现MCP服务器,及其cursor测试利用的手段
  • vscode插件开发,打包后不生效问题解决
  • streamlit构建dashboard
  • 力扣 338题 比特位计数