详解ABP框架中Session功能的用法方法__第1页
详解ABP框架中Session功能的用法方法__第2页
详解ABP框架中Session功能的用法方法__第3页
详解ABP框架中Session功能的用法方法__第4页
详解ABP框架中Session功能的用法方法__第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论