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

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

相关文章:

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

ShenNius.Infrastructure项目用于定义ShenNius.Admin.Mvc项目和ShenNius.Admin.API项目共用的特性类、数据操作接口实现类、上下文类、通讯类,主要文件的用途如下:   Attributes文件夹保存特性类或过滤器类定义,主要包括:   …...

【博资考4】网安学院-硕转博考试内容

【博资考4】硕转博考试内容 - 网络安全与基础理论 写在最前面一. **21年硕转博面试内容回顾**网络、逆向、操作系统、攻防、漏洞1. **网络安全常见攻击方式及其防范措施**1.1 **DDoS攻击(分布式拒绝服务)**1.2 **SQL注入攻击**1.3 **XSS攻击(…...

web前端初学Angular由浅入深上手开发项目

Angular 是一个功能强大的前端框架,适合构建复杂的企业级应用。作为初学者,通过由浅入深的学习路径,可以快速上手并开发项目。以下是逐步学习 Angular 的指导: 1. 基础知识 (1) 了解 Angular Angular 是什么? Angul…...

5.10 P-Tuning v2:多层级提示编码的微调革新

P-Tuning v2:多层级提示编码的微调革新 一、技术架构解析 #mermaid-svg-4Wy6vkXZi67hY9PZ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-4Wy6vkXZi67hY9PZ .error-icon{fill:#552222;}#mermaid-svg-4Wy6vkXZi67h…...

RuntimeWarning: invalid value encountered in scalar power在进行标量的幂运算时遇到了无效值

year_profit ((profit / initial_cash) ** (1 / yy) - 1) * 100 RuntimeWarning: invalid value encountered in scalar power 这个警告表示在执行标量幂运算 ((profit / initial_cash) ** (1 / yy) - 1) * 100 时遇到了无效值。常见的引发原因及解决办法如下: ###…...

LabVIEW同步数据采集功能

VI通过使用数据采集(DAQ)硬件系统,进行多通道同步采集,实时获取模拟信号数据。它利用外部时钟信号触发数据采集,支持连续采样模式,并将采集到的数据实时显示在波形图上,方便用户进行数据监控和分…...

(21)从strerror到strtok:解码C语言字符函数的“生存指南2”

❤个人主页:折枝寄北的博客 ❤专栏位置:简单入手C语言专栏 目录 前言1. 错误信息报告1.1 strerror 2. 字符操作2.1 字符分类函数2.2 字符转换函数 3. 内存操作函数3.1 memcpy3.2 memmove3.2memset3.3 memcmp 感谢您的阅读 前言 当你写下strcpy(dest, s…...

【Azure 架构师学习笔记】- Azure Databricks (12) -- Medallion Architecture简介

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (11) – UC搭建 前言 使用ADB 或者数据湖,基本上绕不开一个架构“Medallion”, 它使得数据管理更为简单有效。ADB 通过…...

Golang——内存(内存管理、内存逃逸、垃圾回收 (GC) 机制)

大家好,这里是编程Cookbook。本文详细介绍Go内存相关的内容,包括内存管理、内存逃逸、垃圾回收 (GC) 机制的三色标记,写屏障。 文章目录 Go 的内存管理mspan && arenasarenasmspan mcachemcentralmheap内存分配逻辑内存回收逻辑优势内…...

关系型数据库的技术思路

一、网络协议 需要根据TCP协议设计一个客户端和服务器之间的命令响应协议。 1、服务端回复声明 2、客户端发送登录包 3、服务端返回登录结果 4、登录成功后进入命令阶段,否则退出。 二、每个连接用一个线程 服务器为每个客户端连接开启一个线程。 三、需要文件的随机…...

web安全——分析应用程序

文章目录 一、确定用户输入入口点二、确定服务端技术三、解析受攻击面 一、确定用户输入入口点 在检查枚举应用程序功能时生成的HTTP请求的过程中,用户输入入口点包括: URL文件路径 通常,在查询字符?之前的URL部分并不视为用户输入入口&am…...

数据库事务的基本要素(ACID)

数据库事务的基本要素(ACID) 在数据库管理系统(DBMS)中,事务(Transaction)是一个或多个数据库操作的集合,这些操作要么全部成功,要么全部失败。事务的目标是保证数据的一…...

server.servlet.session.timeout: 12h(HTTP 会话的超时时间为 12 小时)

从你提供的配置文件(应该是 Spring Boot 的 application.yml 或 application.properties 文件)来看,以下部分与会话超时时间相关: server:servlet:session:timeout: 12h # timeout: 30cookie:name: VENDER_SID会话超时时间的…...

Docker数据卷容器实战

数据卷容器 数据共享 上面讲述的是主机和容器之间共享数据,那么如何实现容器和容器之间的共享数据呢?那就是创建 创建数据卷容器。 命名的容器挂载数据卷,其他容器通过挂载这个(父容器)实现数据共享,挂载…...

基于LangChain4j调用火山引擎DeepSeek R1搭建RAG知识库实战指南

基于LangChain4j调用火山引擎DeepSeek R1搭建RAG知识库实战指南 基于LangChain4j调用火山引擎DeepSeek R1搭建RAG知识库实战指南 基于LangChain4j调用火山引擎DeepSeek R1搭建RAG知识库实战指南一、注册火山引擎账号二、RAG技术核心原理三、环境与工具准备1. 核心组件2. 依赖配…...

Java内存的堆(堆内、堆外)、栈含义理解笔记

一、核心概念区分 1. 内存中的堆(Heap)与栈(Stack) 栈内存 ▸ 用途:存储方法调用、局部变量、基本类型数据(如 int a 1) ▸ 特点: 线程私有,每个线程独立分配栈空间。…...

2.7 大模型RAG内容安全合规检查-大模型ACP模拟题-真题

单选题 在RAG应用中,输入内容合规检查的正确顺序是? A. 先处理模型生成,后检查用户输入 B. 先检查用户输入,后处理模型生成 ✅ C. 仅检查用户输入 D. 仅检查模型输出 解析:合规流程应优先过滤用户输入风险&#xff0…...

C#从入门到精通(35)—如何防止winform程序因为误操作被关闭

前言: 大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任软件经理,从事C#上位机软件开发8年以上!我们在开发的上位机软件运行起来以后,一般在右上角都有一个关闭按钮,正常情况下点击关闭按钮就能关闭软件,但是不排除我们不想关闭软件,但是因为不…...

特斯拉 FSD 算法深度剖析:软件层面全解读

一、引言 特斯拉的 FSD(Full Self-Driving)系统作为自动驾驶领域的前沿成果,其软件层面的算法设计至关重要。本文将从软件的角度,深入探讨特斯拉 FSD 所采用的算法,包括感知、规划、控制等多个方面,以期为…...

中央一号文件里的三维革命:数字孪生如何重构智慧乡村生态?

2024年中央一号文件提出"建设宜居宜业和美乡村",这一目标背后离不开数字技术的支撑。在浙江某数字乡村试点,凡拓数创通过三维建模还原整村风貌,路灯能耗、垃圾分类、古建保护等数据在虚拟空间中实时跳动。管理人员坦言:…...

DeepSeek 助力 Vue3 开发:打造丝滑的页眉(Header)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...

一个原教旨的多路径 TCP

前面提到过 ECMP 和 TCP 之间的互不友好,pacing 收益和中断开销的互斥,在事实上阻碍了 packet-based LB 的部署,也限制了交换机,服务器的并发性能,同时潜在增加了 bufferbloat 的概率,而适用 packet-based …...

DDD 架构之领域驱动设计【通俗易懂】

文章目录 1. 前言2. MVC 对比 DDD3. DDD 分层架构4. 完整业务流程 1. 前言 官方回答:DDD是一种应对复杂业务系统的设计方法,通过将软件设计与业务领域紧密结合,帮助开发人员构建清晰、可维护的领域模型。在复杂的业务系统中,它能…...

蓝桥杯15届JavaB组6题

一开始用的dfs,但是好像是因为数据量太大,数据错误,而且会超时,然后使用bfs dfs的代码(自留): import java.util.*;public class F15 {public static void main(String[] args) {Scanner sc n…...

Python 爬虫与网络安全有什么关系

Python爬虫和网络安全之间存在密切的关系。爬虫是一种用于自动化从网络上获取信息的程序,而网络安全是保护计算机网络和系统免受未经授权的访问、攻击和数据泄露的实践。本文将探讨Python爬虫与网络安全之间的关系以及如何在爬虫开发中注意网络安全。 爬虫的作用和…...

如何判断数据是否使用AES加密以及如何使用AES解密

在现代软件开发中,数据加密是保护敏感信息的重要手段。AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,因其安全性和高效性而被广泛应用。本文将介绍如何判断数据是否使用AES加密,并详细讲解如何使用…...

C++ Primer 泛型算法结构

欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…...

java给钉钉邮箱发送邮件

1.开通POP和IMAP 2.引入pom <dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.7</version> </dependency>3.逻辑 String host "smtp.qiye.aliyun.com"; String port "…...

交安ABC-公路水运工程企业安全员ABC如何报名?报名要哪些条件?

交安ABC的报名方式及报名条件如下&#xff1a; 报名方式 1. 企业注册&#xff1a;企业要进入交通运输部公路水运工程施工主要负责人和安全生产管理人员信息管理系统&#xff0c;注册企业账户&#xff0c;提交企业相关信息&#xff0c;填写企业资料。 2. 发送审核&#xff…...

软件测试丨Docker与虚拟机架构对比分析

Docker 与虚拟机&#xff08;VM&#xff09;在架构上有显著区别&#xff0c;主要体现在资源利用、性能、隔离性和启动时间等方面。以下是两者的主要架构区别&#xff1a; 1. 架构层次 Docker: 主机操作系统&#xff1a;Docker 直接运行在宿主机的操作系统上。Docker 引擎&…...

Gatling介绍

Gatling&#xff1a;基于Scala的高性能负载测试工具 一、Gatling 简介 Gatling 是一个开源的 HTTP 压力测试工具&#xff0c;专为高并发场景设计&#xff0c;支持 HTTP/HTTPS、WebSocket、Kafka 等协议。其基于 Scala 的脚本语法简洁高效&#xff0c;支持实时报告生成和分布式…...

Shot Studio for macOS 发布 1.0.2

Shot Studio 是一个 macOS 的 app&#xff0c;专门为开发者设计&#xff0c;主要用于各大 app 应用商店的预览图设计。 提供了非常多的模板&#xff0c;也预设了很多尺寸。可以直接一键使用 在 1.0.2 这个版本中新增了&#xff1a; 文本渐变 图层&#xff1a;边框、颜色、圆…...

基于Spring Boot的乡村养老服务管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

Harbor服务需要crt证书,而下载是nginx的证书pem,应该怎么处理

1. 明确文件用途 shgbitai.com.key&#xff1a;SSL 私钥文件&#xff08;与 Apache/Nginx 通用&#xff09;。shgbitai.com.pem&#xff1a;已合并的证书文件&#xff08;通常包含域名证书 中间证书链&#xff09;。 Nginx 的证书通常以 .pem 或 .crt 为后缀&#xff0c;而 …...

Hadoop第一课(配置linux系统)

1、让hadoop用户&#xff0c;有root权限&#xff0c;如果可以不输密码更好&#xff1a; (1)先登入root用户 (2)visudo命令进入配置文件 (3)找到 root ALL(ALL) ALL这一行&#xff0c;在该行下面增加:hadoop ALL(ALL) ALL &#xff08;&#xff1a;set nu可以显示行号&#xff…...

Java+Vue+uniapp微信小程序校园自助打印系统(程序+论文+讲解+安装+调试+售后)

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统介绍 在当今时代&#xff0c;网络与科学技术正以前所未有的速度迅猛发展&#xff0c;这股强大…...

QT 中的元对象系统(二):元对象实现原理QMetaObject

目录 1.元对象系统的构成 2.QObject和QMetaObject的关系 3.Qt 元对象模型QMetaObject 3.1.基本信息 3.2.类信息classinfo 3.3.类构造函数constructor 3.4.枚举信息 enumerator 3.5.类方法method 3.6.类属性peoproty 4.MOS(Meta Object System)示例 5.总结 1.元对象系…...

C++:指针函数与函数指针

文章目录 概述什么是指针函数&#xff08;Pointer Function&#xff09;什么是函数指针&#xff08;Function Pointer&#xff09;总结&#xff1a; 概述 什么是指针函数&#xff08;Pointer Function&#xff09; 指针函数是指返回类型为指针的函数。即&#xff0c;函数返回…...

用HTML5+CSS+JavaScript实现新奇挂钟动画

用HTML5+CSS+JavaScript实现新奇挂钟动画 引言 在技术博客中,如何吸引粉丝并保持他们的关注?除了干货内容,独特的视觉效果也是关键。今天,我们将通过HTML5、CSS和JavaScript实现一个新奇挂钟动画,并将其嵌入到你的网站中。这个动画不仅能让你的网站脱颖而出,还能展示你的…...

【MySQL篇】表的操作

1&#xff0c;创建表 语法&#xff1a; create table ( field1 datatype, field2 datatype, field3 datatype )charset 字符集 collate 校验规则 engine 存储引擎; 说明&#xff1a; field表示列名datatype表示列的类型charset字符集&#xff0c;如果没有指明&#xff0c;则…...

CCF-CSP历年真题大全附题解python

2023012的真题 202312-1 仓库规划 5415. 仓库规划 - AcWing题库高质量的算法题库https://www.acwing.com/problem/content/5418/ 解题思路&#xff1a; 其实就是对比&#xff08;x.y,z.....&#xff09;需要找到一个每个元素都大于这个坐标得坐标&#xff0c;本题可以直接…...

Mysql——约束与多表查询

一、约束 1.1定义 约束是对表中的数据进行限制的一套规则&#xff0c;用于防止用户向数据库中输入无效数据。它可以保证表中的数据满足特定业务规则和逻辑&#xff0c;从而维护数据的准确性和可靠性。 1.2作用 数据完整性 &#xff1a;约束可以确保数据在插入、更新或删除时符…...

如何看待 Kaiming He 最新提出的 Fractal Generative Models ?

何恺明团队提出的分形生成模型(Fractal Generative Models) 引发了广泛关注,其核心思想是通过递归调用生成模型模块构建自相似结构,类似数学中的分形概念(如雪花结构),从而高效生成高分辨率数据(如图像)。 Fractal Generative Models即分形生成模型,是一种新型的生成…...

【大模型系列篇】如何解决DeepSeek-R1结构化输出问题,使用PydanticAl和DeepSeek构建结构化Agent

今日号外&#xff1a;&#x1f525;&#x1f525;&#x1f525; DeepSeek开源周&#xff1a;炸场&#xff01;DeepSeek开源FlashMLA&#xff0c;提升GPU效率 下面我们开始今天的主题&#xff0c;deepseek官方明确表示deepseek-r1目前不支持json输出/function call&#xff0c;可…...

Metal 学习笔记五:3D变换

在上一章中&#xff0c;您通过在 vertex 函数中计算position&#xff0c;来平移顶点和在屏幕上移动对象。但是&#xff0c;在 3D 空间中&#xff0c;您还想执行更多操作&#xff0c;例如旋转和缩放对象。您还需要一个场景内摄像机&#xff0c;以便您可以在场景中移动。 要移动…...

Android-创建mipmap-anydpi-v26的Logo

利用 Android Studio 自动创建 创建新项目&#xff1a;打开 Android Studio&#xff0c;点击 “Start a new Android Studio project” 创建新项目。在创建项目的过程中&#xff0c;当设置Target SDK Version为 26 或更高版本时&#xff0c;Android Studio 会在项目的res目录下…...

DOM 事件 HTML 标签属性速查手册

以下是一份 DOM 事件 & HTML 标签属性速查手册&#xff0c;涵盖常用场景和示例&#xff0c;助你快速查阅和使用&#xff1a; 一、DOM 事件速查表 1. 鼠标事件 事件名触发时机适用元素示例代码click元素被点击任意可见元素button.addEventListener(click, () > { ... …...

差旅费控平台作用、功能、11款主流产品优劣势对比

本文将对比以下11款主流费控系统&#xff1a;合思、喜报销、泛微费控报销系统、经贝管家、每刻报销、SAP Concur、Expensify、Zoho Expense等。 随着全球化和企业跨地区运营的不断发展&#xff0c;企业差旅管理已逐渐成为许多公司面临的管理挑战之一。从差旅申请到费用报销的全…...

常用的配置文件格式对比(ini,toml,yaml,json,env,settings.py)及应用程序修改自身配置并保留注释

代码与环境配置解耦 git分支的代码应做到“环境无关”&#xff1a;代码本身不硬编码任何环境特定的配置&#xff08;如数据库连接、密钥、API地址&#xff09;&#xff0c;而是通过外部机制动态注入。 配置与代码分离&#xff1a;将配置信息存储在代码库之外&#xff08;如环…...

MySQL 存储过程详解

文章目录 1. 存储过程定义1.1 基本概念1.2 核心特点1.3 存储过程 vs 函数 2. 工作原理与示意图2.1 执行流程2.2 示意图 3. 使用场景3.1 复杂业务逻辑3.2 批量数据处理3.3 权限控制3.4 性能优化 4. 示例与说明4.1 基础示例&#xff1a;创建存储过程4.2 带输出参数的存储过程4.3 …...