学习ASP.NET Core的身份认证(基于Session的身份认证3)

news/2024/12/4 10:16:35/

  开源博客项目Blog中提供了另一种访问控制方式,其基于自定义类及函数的特性类控制访问权限。本文学习并测试开源博客项目Blog的访问控制方式,测试程序中直接复用开源博客项目Blog中的相关类及接口定义,并在其上调整判断逻辑。
  首先是接口AllowAccessAttribute,用于标识函数是否需要访问控制。

[AttributeUsage(AttributeTargets.Method)]
public class AllowAccessAttribute : Attribute
{}

  然后定义特定类AuthorizationAttribute ,用于标识并处理指定控制器类的访问控制,在类中实现OnAuthorization函数,这里调整了原博客项目Blog的访问控制逻辑(Blog项目使用基于Cookie的身份认证,其在函数内使用HttpContext.User相关信息进行登录判断),函数的输入参数AuthorizationFilterContext中包含有待访问的控制器类及函数信息(如下截图所示),可以据此做更详细的访问控制。

public class AuthorizationAttribute : Attribute, IAuthorizationFilter
{public void OnAuthorization(AuthorizationFilterContext context){bool ignore = ((ControllerActionDescriptor)context.ActionDescriptor).MethodInfo.GetCustomAttributes(false).Any(f => f is AllowAccessAttribute);if (!ignore){if (!context.HttpContext.Session.IsAvailable ||string.IsNullOrEmpty(context.HttpContext.Session.GetString("user"))){context.Result= new RedirectToRouteResult(new RouteValueDictionary{{ "controller", "Account" },{ "action", "Login" }     });return;}}}
}

在这里插入图片描述

  在测试项目中的使用示例如下所示,最终程序的运行效果是访问Home/Privacy可以直接看到页面,放在Home/Index的话,如果没有登录则跳转到登录页面。

[Authorization]
public class HomeController : Controller
{public IActionResult Index(){ViewData.Add("CurUser", HttpContext.Session.GetString("user"));return View();}[AllowAccess]public IActionResult Privacy(){return View();}
}

参考文献:
[1]https://www.cnblogs.com/boonya/p/18557417
[2]http://www.pzhseo.com/article/dipjeg.html
[3]https://cloud.tencent.com/developer/article/1783650
[4]https://blog.csdn.net/ousetuhou/article/details/135392012
[5]https://blog.51cto.com/u_16213593/11106992
[6]https://blog.csdn.net/weixin_30371469/article/details/97157033


http://www.ppmy.cn/news/1552246.html

相关文章

MATLAB神经网络(五)——R-CNN视觉检测

5.1 目标分类、检测与分割 在计算机视觉领域,目标分类、检测与分割是常用计数。三者的联系与区分又在哪呢?目标分类是解决图像中的物体是什么的问题;目标检测是解决图像中的物体是什么,在哪里的问题;目标分割时将目标和…

稳定运行的以SQL Server数据库为数据源和目标的ETL性能变差时提高性能方法和步骤

在使用SQL Server作为数据源和目标的ETL(Extract, Transform, Load)过程中,当系统的性能变差时,可能是因为数据量增加、查询优化不当、硬件资源不足等原因。 提高ETL性能的关键在于数据处理的各个环节,包括SQL优化、硬…

GD库如何根据颜色生成纯色背景图

GD库是一个用于图像处理的PHP扩展模块,它提供了一系列函数来创建、编辑和操作图像。要使用GD库根据颜色生成纯色背景图,可以按照以下步骤进行: 一、检查并安装GD库 检查GD库是否已安装: 可以通过运行phpinfo();或在命令行中使用p…

[Redis#14] 持久化 | RDB | bgsave | check-rdb | 灾备

目录 0.概述 持久化的策略 1 RDB 1.1 触发机制 1.2 流程说明 1.3 RDB 的优缺点 0.概述 在学习 MySQL 数据库时,我们了解到事务的四个核心特性:原子性、一致性、持久性和隔离性。这些特性确保了数据库操作的安全性和可靠性。当我们转向 Redis 时&a…

最新AI自动无人智享直播系统 —— 视频自动播软件热门之选

在当今数字化浪潮汹涌澎湃的时代,直播行业正经历着前所未有的变革与创新。而最新的 AI 自动无人智享直播系统,无疑成为了视频自动播软件中的热门之选,正引领着直播领域迈向新的高度。 这款 AI 自动无人智享直播系统,其核心优势在于…

阿里云DDoS反追踪:守护网络安全的最后一道防线

大家好,今天我们来聊一聊一个非常关键的网络安全话题——DDoS攻击与反追踪技术。在当今互联网环境下,DDoS(分布式拒绝服务)攻击已经成为网络攻击的常见手段,而阿里云的DDoS防护和反追踪技术则为企业提供了一道坚实的防…

Harnessing Large Language Models for Training-free Video Anomaly Detection

标题:利用大型语言模型实现无训练的视频异常检测 原文链接:https://openaccess.thecvf.com/content/CVPR2024/papers/Zanella_Harnessing_Large_Language_Models_for_Training-free_Video_Anomaly_Detection_CVPR_2024_paper.pdf 源码链接:ht…

Ubuntu24安装 python3-mysql.connector

正确命令 sudo apt install python3-mysql.connector说明 网络上已有的文章Python版本和Ubuntu版本旧,命令不生效。