• ABP(现代ASP.NET样板开发框架)系列之7、ABP Session管理


    点这里进入ABP系列文章总目录

    基于DDD的现代ASP.NET开发框架--ABP系列之7、ABP Session管理

    ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称。

    ABP的官方网站http://www.aspnetboilerplate.com

    ABP在Github上的开源项目https://github.com/aspnetboilerplate


     

    简介

    如果一个应用程序需要登录,则它必须知道当前用户执行了什么操作。因此ASP.NET在展示层提供了一套自己的SESSION会话对象,而ABP则提供了一个可以在任何地方
    获取当前用户和租户的IAbpSession接口。

     

    关于IAbpSession

    需要获取会话信息则必须实现IAbpSession接口。虽然你可以用自己的方式去实现它(IAbpSession),但是它在module-zero项目中已经有了完整的实现。

    注入Session

    IAbpSession通常是以属性注入的方式存在于需要它的类中,不需要获取会话信息的类中则不需要它。如果我们使用属性注入方式,我们可以用
    NullAbpSession.Instance作为默认值来初始化它(IAbpSession),如下所示:

    public class MyClass : ITransientDependency
    {
        public IAbpSession AbpSession { get; set; }
    
        public MyClass()
        {
            AbpSession = NullAbpSession.Instance;
        }
    
        public void MyMethod()
        {
            var currentUserId = AbpSession.UserId;
            //...
        }
    }

    由于授权是应用层的任务,因此我们应该在应用层和应用层的上一层使用IAbpSession(我们不在领域层使用IAbpSession是很正常的)。

    ApplicationService, AbpControllerAbpApiController 这3个基类已经注入了AbpSession属性,因此在Application Service的实例方法中,能直接使用AbpSession属性。

    使用Session属性

    AbpSession定义的一些关键属性:

    • UserId: 当前用户的标识ID,如果没有当前用户则为null.如果需要授权访问则它不可能为空。
    • TenantId: 当前租户的标识ID,如果没有当前租户则为null。
    • MultiTenancySide: 可能是Host或Tenant。

    UserId和TenantId是可以为null的。当然也提供了不为空时获取数据的 GetUserId()和GetTenantId() 方法 。当你确定有当前用户时,你可以使用GetUserId()方法。
    如果当前用户为空,使用该方法则会抛出一个异常。GetTenantId()的使用方式和GetUserId()类似。


     
    阳铭注:

    ABP框架中的AbpSession, 并没有使用到System.Web.HttpSessionStateBase, 而是自己定义了一个Abp.Runtime.Session.IAbpSession接口, 并在Zero模块中通过AspNet.Identity组件实现了AbpSession对象的存值、取值。 所以即使Web服务重启,也不会丢失Session状态。

    在我自己的项目中, Session对象只有UserId、TenantId、MultiTenancySide这几个属性是不够用的,我扩充了几个属性和方法,使用起来非常方便。有这个需求的朋友,欢迎加入QQ群与我交流。


    希望更多国内的架构师能关注到ABP这个项目,也许这其中有能帮助到您的地方,也许有您的参与,这个项目可以发展得更好。

    欢迎加ABP架构设计交流QQ群:134710707

    ABP架构设计交流群

     

    点这里进入ABP系列文章总目录

  • 相关阅读:
    iOS 开发之粒子效果
    ios 中使用SBJson拼接和解析json
    iphone document 图片存储和读取
    ios项目绕过证书访问https程序
    我应该直接学Swift还是Objective-C?
    iOS中使用 Reachability 检测网络
    iOS App性能优化
    iOS中的堆(heap)和栈(stack)的理解
    iOS中引用计数内存管理机制分析
    iOS多线程编程Part 3/3
  • 原文地址:https://www.cnblogs.com/mienreal/p/4561235.html
Copyright © 2020-2023  润新知