基于es6实现单点登录和子系统登录自动切换的方法技术方案

技术编号:32361844 阅读:12 留言:0更新日期:2022-02-20 03:30
本发明专利技术公开了一种基于es6实现单点登录和子系统登录自动切换的方法,通过采用javascript的ECMAScript 6版本的proxy代理方法,解决每次启动服务时都需要手动去修改Flag的值,以便确定是单点登录还是子系统登录。以便确定是单点登录还是子系统登录。以便确定是单点登录还是子系统登录。

【技术实现步骤摘要】
基于es6实现单点登录和子系统登录自动切换的方法


[0001]本专利技术涉及前端开发
,尤其涉及一种基于es6实现单点登录和子系统登录自动切换的方法。

技术介绍

[0002]在为企业开发的业务子系统过程中,随着企业业务系统的逐渐增多,单点登录成为企业业务整合的解决方案之一,所谓单点登录,是指在多个应用系统中,只需要登录一次,就访问其他相互信任的应用系统。然而在有的场景下仍然需要单独启动业务子系统来满足企业的需求,这就意味着我们开发的系统需要同时满足单点登录的启动方式,也要能单独的启动子系统。传统的做法是给子系统设置一个默认的全局Flag为false,表示子系统登录,true表示单点登录。确定好Flag后,在启动服务的时候,需要手动修改Flag的值,然后跳转至不同的登录页面。这样做固然能实现业务需求,但是需要每次启动服务的时候手动修改Flag的值,不利于扩展和维护。

技术实现思路

[0003]本专利技术的目的就在于为了解决上述问题而提供一种基于es6实现单点登录和子系统登录自动切换的方法,本专利技术采用javascript的ECMAScript 6版本的proxy代理方法,解决每次启动服务时都需要手动去修改Flag的值,以便确定是单点登录还是子系统登录。
[0004]本专利技术通过以下技术方案来实现上述目的:
[0005]一种基于es6实现单点登录和子系统登录自动切换的方法,包括以下步骤:
[0006]步骤1:在GlobalData.js中配置全局默认标识isClient对象,该对象内的flag属性是单点登录和子系统登录的标识,默认是false;(false,表示子系统登录,true表示单点登录)。
[0007]步骤2:在GlobalData.js中实例化proxy,利用ES6的proxy特性,重构对象的get方法,以达到拦截和自动处理属性变化的目的:
[0008]a、代理使用Proxy构造函数创建,该构造函数接收两个参数:目标对象,处理程序对象,通过new关键字生成代理实例;
[0009]b、定义捕获器(trap),捕获器是在处理程序对象中定义的“基本操作的拦截器”,每个处理程序对象包含零个或多个捕获器,每个捕获器都对应一种基本操作,直接或间接在代理对象上调用;每次在代理对象上调用这些基本操作时,代理在这些操作传播到目标对象之前先调用捕获器函数,从而拦截并修改相应的行为;
[0010]c、设置捕获器参数,所有捕获器都访问相应的参数,基于这些参数重建被捕获方法的原始行为,比如,get()捕获器会接收到目标对象trapTarget、要查询的属性property和代理对象receiver三个参数;
[0011]d、调用捕获器与之对应的反射API;处理程序对象中所有捕获的方法都有对应的反射(Refect)API方法。这些方法与捕获器拦截的方法具有相同的名称和函数签名,而且也
具有与被拦截方法相同的行为。
[0012]进一步方案为,所述步骤1中,在代理isClient过程中,当访问代理对象上的isClient时,判断当前url路径中是否包含token字段,如果包含token字段,就重新定义get方法,并将其返回true。
[0013]进一步方案为,所述步骤1中,在代理isClient过程中,当访问代理对象上的isClient时,判断当前url路径中是否包含token字段,如果不存在token字段,则在get方法中利用反射API,返回Reflect.get(...arguments)方法并映射到isClient对象的flag属性。
[0014]进一步方案为,所述步骤2中,通过es6中模块导出机制将代理对象导出供main.js引入,在main.js中通过全局路由导航守卫对GlobalData.proxy.isClient进行访问拦截当前url;如果当前url存在token字段,代理对象会自动将isClient对象中的flag字段置为true,并自动跳转至单点登录,否则置为false,自动跳转至子系统登录。就实现了单点登录和子系统登录自动切换。
[0015]进一步方案为,所述步骤2中,当进入单点登录状态,然后点击退出登录时会进入到子系统登录状态,点击退出登录时url上面已经不存在token字段,proxy代理会再次将isClient对象中的flag字段置为false,自动跳转至子系统登录状态,则需要将isClient写入sessionStorage,在点击退出登录时获取sessionStorage里面的isClient标记判断即可。
[0016]本专利技术的有益效果在于:
[0017]本专利技术的一种基于es6实现单点登录和子系统登录自动切换的方法,利用es6的proxy用于修改某些操作的默认行为的特性达到在JavaScript语言中对象自动处理属性的目的。
附图说明
[0018]为了更清楚地说明本专利技术实施例中的技术方案,下面将对实施例或现有技术描述中所需要实用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还根据这些附图获得其他的附图。
[0019]图1为本专利技术流程图。
具体实施方式
[0020]为使本专利技术的目的、技术方案和优点更加清楚,下面将对本专利技术的技术方案进行详细的描述。显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施方式,都属于本专利技术所保护的范围。
[0021]在任一实施例中,如图1所示,本专利技术的一种基于es6实现单点登录和子系统登录自动切换的方法,包括:
[0022]步骤1:在GlobalData.js中配置全局默认标识isClient对象,该对象内的flag属性是单点登录和子系统登录的标识,默认是false。(false,表示子系统登录,true表示单点
登录)。
[0023]步骤2:在GlobalData.js中实例化proxy,利用ES6的proxy特性,重构对象的get方法,以达到拦截和自动处理属性变化的目的:
[0024]代理使用Proxy构造函数创建,该构造函数接收两个参数:目标对象,处理程序对象。通过new关键字生成代理实例。
[0025]定义捕获器(trap),捕获器是在处理程序对象中定义的“基本操作的拦截器”,每个处理程序对象可以包含零个或多个捕获器,每个捕获器都对应一种基本操作,可以直接或间接在代理对象上调用。每次在代理对象上调用这些基本操作时,代理可以在这些操作传播到目标对象之前先调用捕获器函数,从而拦截并修改相应的行为。
[0026]设置捕获器参数。所有捕获器都可以访问相应的参数,基于这些参数可以重建被捕获方法的原始行为,比如,get()捕获器会接收到目标对象trapTarget、要查询的属性property和代理对象receiver本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于es6实现单点登录和子系统登录自动切换的方法,其特征在于,包括以下步骤:步骤1:在GlobalData.js中配置全局默认标识isClient对象,该对象内的flag属性是单点登录和子系统登录的标识,默认是false;步骤2:在GlobalData.js中实例化proxy,利用ES6的proxy特性,重构对象的get方法,以达到拦截和自动处理属性变化的目的:a、代理使用Proxy构造函数创建,该构造函数接收两个参数:目标对象,处理程序对象,通过new关键字生成代理实例;b、定义捕获器,捕获器是在处理程序对象中定义的“基本操作的拦截器”,每个处理程序对象包含零个或多个捕获器,每个捕获器都对应一种基本操作,直接或间接在代理对象上调用;每次在代理对象上调用这些基本操作时,代理在这些操作传播到目标对象之前先调用捕获器函数,从而拦截并修改相应的行为;c、设置捕获器参数,所有捕获器都访问相应的参数,基于这些参数重建被捕获方法的原始行为;d、调用捕获器与之对应的反射API;处理程序对象中所有捕获的方法都有对应的反射API方法。这些方法与捕获器拦截的方法具有相同的名称和函数签名,而且也具有与被拦截方法相同的行为。2.如权利要求1所述的一种基于es6实现单点登录和子系统登录自动切换的方法,其特征在于,所述步骤1中,在代理isClient过程中,当访问代理对象上的isClient时,判断当前url路径中是否包含token字段,如果包含token字段,就重新定义get方法,并将其返回tr...

【专利技术属性】
技术研发人员:文超
申请(专利权)人:四川启睿克科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1