版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、详解ABP框架中Session功能的用法方法_ 假如一个应用程序需要登录,则它必需知道当前用户执行了什么操作。因此ASP.NET在展现层供应了一套自己的SESSION会话对象,而ABP则供应了一个可以在任何地方 猎取当前用户和租户的IAbpSession接口。 关于IAbpSession 需要猎取会话信息则必需实现IAbpSession接口。虽然你可以用自己的方式去实现它(IAbpSession),但是它在module-zero项目中已经有了完整的实现。 注入Session IAbpSession通常是以属性注入的方式存在于需要它的类中,不需要猎取会话信息的类中则不需要它。假如我们用法属性注入
2、方式,我们可以用 NullAbpSession.Instance作为默认值来初始化它(IAbpSession),如下所示: public class MyClass : ITransientDependency public IAbpSession AbpSession get; set; public MyClass() AbpSession = NullAbpSession.Instance; public void MyMethod() var currentUserId = AbpSession.UserId; /. 由于授权是应用层的任务,因此我们应当在应用层和应用层的上一层用法IA
3、bpSession(我们不在领域层用法IAbpSession是很正常的)。 ApplicationService, AbpController 和 AbpApiController 这3个基类已经注入了AbpSession属性,因此在Application Service的实例方法中,能挺直用法AbpSession属性。 用法Session属性 AbpSession定义的一些关键属性: UserId: 当前用户的标识ID,假如没有当前用户则为null.假如需要授权访问则它不行能为空。 TenantId: 当前租户的标识ID,假如没有当前租户则为null。 MultiTenancySide: 可
4、能是Host或Tenant。 UserId和TenantId是可以为null的。当然也供应了不为空时猎取数据的 GetUserId()和GetTenantId() 方法 。当你确定有当前用户时,你可以用法GetUserId()方法。 假如当前用户为空,用法该方法则会抛出一个特别。GetTenantId()的用法方式和GetUserId()类似。 ABP如何实现Session的 名目代码: IAbpSession:IAbpSession接口 using Abp.MultiTenancy; namespace Abp.Runtime.Session public interface IAbpSes
5、sion long? UserId get; int? TenantId get; MultiTenancySides MultiTenancySide get; long? ImpersonatorUserId get; int? ImpersonatorTenantId get; NullAbpSession:实现了空对象模式 using Abp.MultiTenancy; namespace Abp.Runtime.Session / summary / Implements null object pattern for see cref=IAbpSession/. / /summar
6、y public class NullAbpSession : IAbpSession / summary / Singleton instance. / /summary public static NullAbpSession Instance get return SingletonInstance; private static readonly NullAbpSession SingletonInstance = new NullAbpSession(); / inheritdoc/ public long? UserId get return null; / inheritdoc/
7、 public int? TenantId get return null; public MultiTenancySides MultiTenancySide get return MultiTenancySides.Tenant; public long? ImpersonatorUserId get return null; public int? ImpersonatorTenantId get return null; private NullAbpSession() ClaimsAbpSession:猎取会话状态 using System; using System.Linq; u
8、sing System.Security.Claims; using System.Threading; using Abp.Configuration.Startup; using Abp.MultiTenancy; using Abp.Runtime.Security; namespace Abp.Runtime.Session / summary / Implements see cref=IAbpSession/ to get session properties from claims of see cref=Thread.CurrentPrincipal/. / /summary
9、public class ClaimsAbpSession : IAbpSession private const int DefaultTenantId = 1; public virtual long? UserId get var claimsPrincipal = Thread.CurrentPrincipal as ClaimsPrincipal; if (claimsPrincipal = null) return null; var claimsIdentity = claimsPrincipal.Identity as ClaimsIdentity; if (claimsIde
10、ntity = null) return null; var userIdClaim = claimsIdentity.Claims.FirstOrDefault(c = c.Type = ClaimTypes.NameIdentifier); if (userIdClaim = null | string.IsNullOrEmpty(userIdClaim.Value) return null; long userId; if (!long.TryParse(userIdClaim.Value, out userId) return null; return userId; public v
11、irtual int? TenantId get if (!_multiTenancy.IsEnabled) return DefaultTenantId; var claimsPrincipal = Thread.CurrentPrincipal as ClaimsPrincipal; if (claimsPrincipal = null) return null; var tenantIdClaim = claimsPrincipal.Claims.FirstOrDefault(c = c.Type = AbpClaimTypes.TenantId); if (tenantIdClaim
12、= null | string.IsNullOrEmpty(tenantIdClaim.Value) return null; return Convert.ToInt32(tenantIdClaim.Value); public virtual MultiTenancySides MultiTenancySide get return _multiTenancy.IsEnabled !TenantId.HasValue ? MultiTenancySides.Host : MultiTenancySides.Tenant; public virtual long? ImpersonatorU
13、serId get var claimsPrincipal = Thread.CurrentPrincipal as ClaimsPrincipal; if (claimsPrincipal = null) return null; var impersonatorUserIdClaim = claimsPrincipal.Claims.FirstOrDefault(c = c.Type = AbpClaimTypes.ImpersonatorUserId); if (impersonatorUserIdClaim = null | string.IsNullOrEmpty(impersona
14、torUserIdClaim.Value) return null; return Convert.ToInt64(impersonatorUserIdClaim.Value); public virtual int? ImpersonatorTenantId get if (!_multiTenancy.IsEnabled) return DefaultTenantId; var claimsPrincipal = Thread.CurrentPrincipal as ClaimsPrincipal; if (claimsPrincipal = null) return null; var
15、impersonatorTenantIdClaim = claimsPrincipal.Claims.FirstOrDefault(c = c.Type = AbpClaimTypes.ImpersonatorTenantId); if (impersonatorTenantIdClaim = null | string.IsNullOrEmpty(impersonatorTenantIdClaim.Value) return null; return Convert.ToInt32(impersonatorTenantIdClaim.Value); private readonly IMul
16、tiTenancyConfig _multiTenancy; / summary / Constructor. / /summary public ClaimsAbpSession(IMultiTenancyConfig multiTenancy) _multiTenancy = multiTenancy; AbpSessionExtensions:IAbpSession扩展方法 using System; namespace Abp.Runtime.Session / summary / Extension methods for see cref=IAbpSession/. / /summ
17、ary public static class AbpSessionExtensions / summary / Gets current Users Id. / Throws see cref=AbpException/ if see cref=IAbpSession.UserId/ is null. / /summary / param name=sessionSession object./param / returnsCurrent Users Id./returns public static long GetUserId(this IAbpSession session) if (
18、!session.UserId.HasValue) throw new AbpException(Session.UserId is null! Probably, user is not logged in.); return session.UserId.Value; / summary / Gets current Tenants Id. / Throws see cref=AbpException/ if see cref=IAbpSession.TenantId/ is null. / /summary / param name=sessionSession object./param / returnsCurrent Tenants Id./returns / exception cref=AbpException/exception public static int Ge
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五版企业人力资源总监职责与权益合同3篇
- 武汉体育学院《地下水数值模拟基础与应用》2023-2024学年第一学期期末试卷
- 武汉传媒学院《现代分析检验技术应用》2023-2024学年第一学期期末试卷
- 二零二五年度建筑工地安全文明施工评估合同3篇
- 二零二五版儿童乐园开业庆典承包合同范本3篇
- 2024陶瓷厂劳务外派工作合同模板3篇
- 2025版大型工程船舶租赁合同6篇
- 威海职业学院《数值计算与仿真》2023-2024学年第一学期期末试卷
- 二零二五年度酒店会议场地预订与策划服务合同3篇
- 天津城市职业学院《工程光学》2023-2024学年第一学期期末试卷
- 专题24 短文填空 选词填空 2024年中考英语真题分类汇编
- JT∕T 794-2011 道路运输车辆卫星定位系统 车载终端技术要求
- 西南师大版五年级上册小数乘除法竖式计算题200道及答案
- 再生障碍性贫血课件
- AQ/T 2061-2018 金属非金属地下矿山防治水安全技术规范(正式版)
- 2024年湖北三江航天江河化工科技有限公司招聘笔试冲刺题(带答案解析)
- 采购人员管理制度
- 矿卡司机安全教育考试卷(带答案)
- SYT 6963-2013 大位移井钻井设计指南
- 合同增项补充协议书范本
- 产后抑郁症的护理查房
评论
0/150
提交评论