ShenNiusModularity项目源码学习(14:ShenNius.Infrastructure项目分析)

  ShenNius.Infrastructure项目用于定义ShenNius.Admin.Mvc项目和ShenNius.Admin.API项目共用的特性类、数据操作接口实现类、上下文类、通讯类,主要文件的用途如下:
在这里插入图片描述
  Attributes文件夹保存特性类或过滤器类定义,主要包括:
  1)AuthorityAttribute:访问控制类,继承自ActionFilterAttribute,主要实现在访问函数之前判断用户是否登录、是否有权限访问该函数;
  2)GlobalExceptionFilter:自定义异常过滤器类,继承自IExceptionFilter接口,用于在捕获异常时记录日志,该类在ShenNius.Admin.API项目的ShenniusAdminApiModule.OnConfigureServices中调用以注册全局异常处理(参考文献2)。
.  3)LogAttribute:审计日志记录类,继承自ActionFilterAttribute接口,用于在操作执行后记录日志,但暂未看到项目中使用该类;
  4)ModelValidateAttribute:自定义模型验证过滤器类,继承自ModelValidateAttribute接口,用于在模型验证失败后使用ApiResult类返回验证结果,该类在ShenNius.Admin.API项目的ShenniusAdminApiModule.OnConfigureServices中调用以注册全局过滤器;
  5)MultiTenantAttribute:自定义多租户处理类,继承自ActionFilterAttribute和IActionFilter,用于在执行操作时从当前上下文中获取当前用户的TenantId,并赋予操作函数的每个输入参数对象的TenantId属性(只要参数类继承自IGlobalTenant接口),该类按需赋予ShenNius.Admin.Mvc项目和ShenNius.Admin.API项目的控制器类及其内部函数。

  Hubs文件夹仅包含UserLoginNotifiHub类定义,该类继承自Hub,使用SignalR与前端通信,用于同一账户在不同客户端登录时通知之前的客户端下线。该类在ShenNius.Admin.API项目的ShenniusAdminApiModule的OnConfigureServices内注册服务,并在OnApplicationInitialization函数内使用app.UseEndpoints映射全局路由。ShenNius.Mvc.Admin项目的mysignalR.js文件内使用signalR.HubConnectionBuilder连接上述路由,然后在Index.cshtml文件内使用signalr发送当前用户已经登录的信息,也即调用服务端UserLoginNotifiHub.SaveCurrentUserInfo函数保存信息,如果信息已存在,则提醒该账号已在另一地方登录,并返回登录页面。
  Repository文件夹包括特定数据操作接口的实现类,主要包括商城模块的商品、订单数据操作接口实现类,系统模块的菜单、回收站数据操作接口实现类,之前文章中介绍过,在此不再赘述。
  TimedTask文件夹包括自定义后台服务类TimedBackgroundService,该类继承自BackgroundService(参考文献3),其启动后创建System.Threading.Timer对象(参考文献4)运行定时服务,定期刷新用户的登录状态。ShenNius.Admin.API项目的ShenniusAdminApiModule的OnConfigureServices内使用Services.AddHostedService注册后台服务。
  根目录下的EntityExpand文件定义辅助函数处理树形结构数据,主要用在ShenNius.Admin.API项目的ColumnController、CategoryController控制器类以处理树形栏目及商品分类,还用在本项目的MenuRepository内显示多级菜单。
  根目录下的ShenNiusContext类是ShenNius.Domain项目IShenNiusContext接口的实现类,该类基于Token或者HttpContext.User获取用户信息、登录信息、IP等上下文数据,ShenNius.Admin.API项目的ShenniusAdminApiModule的OnConfigureServices内注册该类。

参考文献:
[1]https://gitee.com/shenniu_code_group/shen-nius.-modularity
[2]https://www.cnblogs.com/51net/p/18698187
[3]https://blog.csdn.net/qq_31136349/article/details/139473574
[4]https://www.cnblogs.com/hnzhengfy/p/SystemThreadingTimer.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/979087.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mysql表字段字符集未设置导致乱码问题

项目场景: 在使用mysql的text类型作为字段类型【未设置编码】,且表结构【设置了编码集】的条件下,查询表这个字段会出现乱码的情况。 问题描述 今日测试小伙伴给题主提出了一个bug,数据库当中的text文本字段在存储json的情况下&…

staruml绘制时序图和用例图

文章目录 1.文章介绍2.绘制用例图3.绘制时序图 1.文章介绍 之前,我们初步介绍了这个staruml软件的安装和如何使用这个软件对于uml类图进行绘制,当时我们是绘制了这个user类,实现了相关的接口,表示他们之间的关系,在今…

火狐浏览器多开指南:独立窗口独立IP教程

无论是跨境电商从业者需要管理多个店铺账号,还是海外社交媒体营销人员要运营多个社交平台账号,亦或是从事多账号广告投放的人员,都面临着一个共同的挑战 —— 如何高效管理多个账号,并确保每个账号的独立性。 在这种情况下&#…

DeepSeek赋能大模型内容安全,网易易盾AIGC内容风控解决方案三大升级

在近两年由AI引发的生产力革命的背后,一场关乎数字世界秩序的攻防战正在上演:AI生成的深度伪造视频导致企业品牌声誉损失日均超千万,批量生成的侵权内容使版权纠纷量与日俱增,黑灰产利用AI技术持续发起欺诈攻击。 与此同时&#…

【论文精读】YOLO-World:实时开放词汇目标检测

论文地址: YOLO-World: Real-Time Open-Vocabulary Object Detection 源代码:YOLO-World 摘要 YOLO系列检测器因其高效性和实用性而被广泛认可。然而,它们依赖于预定义和训练过的物体类别,这限制了其在开放场景中的适用性。为了…

开放标准(RFC 7519):JSON Web Token (JWT)

开放标准:JSON Web Token 前言基本使用整合Shiro登录自定义JWT认证过滤器配置Config自定义凭证匹配规则接口验证权限控制禁用session缓存的使用登录退出单用户登录Token刷新双Token方案单Token方案 前言 JSON Web Token (JWT) 是一种开放标准…

mysql架构查询执行流程(图解+描述)

目录 mysql架构查询执行流程 图解 描述 mysql架构查询执行流程 图解 描述 用户连接到数据库后,由连接器处理 连接器负责跟客户端建立连接、获取权限、维持和管理连接 客户端发送一条查询给服务器 服务器先检查查询缓存,如果命中缓存,则立…

k8s使用containerd作为容器运行时配置Harbor私有仓库与阿里云私有仓库以及镜像加速器,k8s基于containerd如何配置harbor私有仓库

至于containerd大家还需要在去学习以下使用的命令。 版本介绍 k8s:v1.28.2containerd:1.6.33 1.配置containerd镜像加速器 [rootmaster ~]# vim /etc/containerd/config.toml ---编辑containerd配置文件找到以下位置新添加 [plugins."io.contain…

【MySql】EXPLAIN执行计划全解析:15个字段深度解读与调优指南

文章目录 一、执行计划核心字段总览二、关键字段深度拆解1. type(访问类型)——查询性能的晴雨表典型场景分析: 2. key_len(索引使用长度)——索引利用率的检测仪计算示例: 3. Extra(附加信息&a…

python-leetcode-最长有效括号

32. 最长有效括号 - 力扣(LeetCode) class Solution:def longestValidParentheses(self, s: str) -> int:stack [-1] # 存储索引,初始值 -1 代表“未匹配起点”max_length 0for i, char in enumerate(s):if char (:stack.append(i)els…

单目摄像头物体深度计算基础原理

三维空间物体表面点位与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数,而相机参数的求解就是相机标定。 相机的参数矩阵包括内参和外参: 外参:决定现实坐标到摄像机坐标。…

CF 106A.Card Game(Java实现)

问题分析 定义一个字符是王牌,打出第一张牌a,第二张牌b。如果只有a是王牌花色直接赢。如果a,b同花色且a>b则a赢;如果只有b是王牌,a输。如果a,b都不是王牌且不同花色,不比较直接输。 思路分析…

在 Vue 组件中,如何确认父组件在 add 模式下传入 value 的情况及其对子组件 getProducts() 方法的触发影响?

文章目录 父组件中 <ave-form> 的使用add 模式下触发逻辑value 的传入情况是否触发 getProducts()&#xff1f; 验证 add 模式下 getProducts() 是否触发结论&#xff1a; 检查父组件传入 value 的完整情况如何明确知道父组件传入的 value最终回答 父组件 index.vue子组件…

Python的那些事第三十四篇:基于 Plotly 的交互式图表与仪表板设计与应用

基于 Plotly 的交互式图表与仪表板设计与应用 摘要: 本文深入探讨了 Plotly 这一强大的交互式图表和仪表板库。首先介绍了 Plotly 的背景与发展历程,随后详细阐述了其核心功能特性,包括丰富的图表类型、高度的自定义能力以及便捷的交互操作。通过实际案例分析和示例代码展示…

瑞芯微RK安卓Android主板GPIO按键配置方法,触觉智能嵌入式开发

触觉智能分享&#xff0c;瑞芯微RK安卓Android主板GPIO按键配置方法&#xff0c;方便大家更好利用空闲IO&#xff01;由触觉智能Purple Pi OH鸿蒙开发板演示&#xff0c;搭载了瑞芯微RK3566四核处理器&#xff0c;树莓派卡片电脑设计&#xff0c;支持安卓Android、开源鸿蒙Open…

树莓百度百科更新!宜宾园区业务再添新篇

树莓集团宜宾园区业务不断拓展&#xff0c;主要体现在以下几个方面&#xff1a; 产业布局 -聚焦数字经济核心领域&#xff1a;涵盖软件开发、人工智能、大数据等&#xff0c;吸引众多上下游企业入驻&#xff0c;形成从芯片研发、软件开发到系统集成的完整产业链条。 -推进“双…

Orange 开源项目 - 集成阿里云大模型

1 阿里云的大模型服务平台百炼 阿里云的大模型服务平台百炼是一站式的大模型开发及应用构建平台。不论是开发者还是业务人员&#xff0c;都能深入参与大模型应用的设计和构建。您可以通过简单的界面操作&#xff0c;在5分钟内开发出一款大模型应用&#xff0c;或在几小时内训练…

rust 前端npm依赖工具rsup升级日志

rsup是使用 rust 编写的一个前端 npm 依赖包管理工具&#xff0c;可以获取到项目中依赖包的最新版本信息&#xff0c;并通过 web 服务的形式提供查看、升级操作等一一系列操作。 在前一篇文章中&#xff0c;记录初始的功能设计&#xff0c;自己的想法实现过程。在自己的使用过…

如何使用Docker一键本地化部署LibrePhotos搭建私有云相册

文章目录 前言1.关于LibrePhotos2.本地部署LibrePhotos3.LibrePhotos简单使用4. 安装内网穿透5.配置LibrePhotos公网地址6. 配置固定公网地址 前言 你是不是也经常对着手机里那一堆珍贵的照片发愁&#xff0c;心里想着&#xff1a;‘这要是被谁偷偷看了可咋办&#xff1f;’别…

PXE批量网络装机与Kickstart自动化安装工具

目录 一、系统装机的原理 1.1、系统装机方式 1.2、系统安装过程 二、PXE批量网络装机 2.1、PXE实现原理 2.2、搭建PXE实际案例 2.2.1、安装必要软件 2.2.2、搭建DHCP服务器 2.2.3、搭建TFTP服务器 2.2.4、挂载镜像并拷贝引导文件到tftp服务启动引导文件夹下 2.2.5、编…