与web会话解耦注入上下文信息的服务调用系统及方法

文档序号:7766192阅读:389来源:国知局
专利名称:与web会话解耦注入上下文信息的服务调用系统及方法
技术领域
本发明涉及一种注入web会话中用户上下文信息的服务调用系统及方法,特别是涉及一种与web会话解耦自动注入用户上下文信息的服务调用系统及方法。
背景技术
随着计算机技术、网络技术、信息技术的发展,基于web的管理信息系统应运而生。如今的web技术手段越来越成熟、完善,基于B/S (Browser/Server,浏览器/服务器) 模式开发的信息系统方法越来越普及,这也将成为现今乃至未来很长一段时间内的主流。web会话(session),是用于在客户端和web服务器之间保持状态的一种机制。基于web的信息技术,是依赖于HTTP协议的。由于HTTP协议本身的无状态性,给一些深入的复杂应用带来困扰,因此出现了 web会话机制用来解决此缺陷。web会话存储需要在整个用户访问过程中保持其状态的信息,例如登录信息或用户浏览web应用程序时需要的其它信肩、ο后台的核心业务逻辑(服务),往往也需要访问并使用当前会话中的用户相关信息。目前一般的做法是,直接将web会话信息传递给后台服务,这导致的后果是,后台核心业务逻辑(服务)代码往往与web层耦合过大。而真正的业务逻辑处理单元一旦与web会话耦合的过紧,则无法在不同的技术路线下有效复用,造成极大资源浪费,也给后续的支持维护带来不利的影响。

发明内容
本发明要解决的技术问题是提供一种与web会话解耦自动注入用户上下文信息的服务调用系统及方法。本发明可以保证核心业务逻辑(服务)在不同技术路线的实现机制下,可重复使用。为解决上述技术问题,本发明的与web会话解耦自动注入用户上下文信息的服务调用系统,包括服务调用客户端,用于发起调用后台服务的请求,与服务器建立起会话连接,且在请求中还包含有用户相关信息;其中,用户相关信息包括(但不仅限于)用户身份信息,所属组织机构,所属角色,客户端IP地址。服务调度总控模块,部署在服务器端,用于截获客户端发出的请求,根据请求所建立的会话中的用户相关信息,生成用户上下文信息令牌,并将用户上下文信息令牌注入客户端调用的服务中,在完成服务调用后,检查用户上下文信息令牌中的用户数据是否被修改,根据被修改的用户数据更新请求所建立的会话中的用户相关信息;一组被调用的服务,用于在需要时使用用户上下文信息令牌中的用户数据,且能对用户上下文信息令牌中的用户数据进行修改。其中,被调用的服务是通过一组服务代码完成的。这组服务代码从用户上下文信息令牌中获取到用户数据后进行相应的业务处理。所述用户上下文信息令牌,是由处理代码完成的;该用户上下文信息令牌提供上下文信息的处理接口供外部调用,用以进行上下文信息的读取和写入操作,在发生写入操作后对被修改的信息项进行标记。所述的服务调度总控模块,在根据请求所建立的会话中的用户相关信息生成用户上下文信息令牌,以及在根据用户上下文信息令牌中被修改的用户数据更新请求所建立的会话中的用户相关信息,是通过服务调度总控模块从用户的同步信息项配置中读取所需要处理的用户信息项完成的。其中,同步信息配置项是允许用户自定义的。所述的服务调度总控模块,是将生成的用户上下文信息令牌写入服务运行所在的当前线程空间(Threadlocal),使得服务可以对用户上下文信息令牌进行操作。另外,本发明还提供一种与web会话解耦自动注入用户上下文信息的服务调用系统的实现方法,包括步骤步骤一、服务调用客户端的用户发起web请求调用后台服务;步骤二、服务调度总控模块获取用户配置的上下文同步信息项,如果没有定义信息项,则跳过步骤三;步骤三、服务调度总控模块将web会话信息中需要同步的信息项数据同步至用户上下文信息令牌中;步骤四、服务调度总控模块将用户上下文信息令牌注入后台服务供使用;步骤五、服务调用,服务代码使用并维护用户上下文信息令牌中的用户数据;步骤六、服务调度总控模块监控是否发生用户上下文信息令牌中的用户数据修改,如果否,则跳过步骤七、步骤八;步骤七、服务调度总控模块获取用户配置的上下文同步信息项,如果没有定义信息项,则跳过步骤八;步骤八、服务调度总控模块将发生修改的用户上下文信息令牌中需要同步的信息项数据同步至web会话信息中;步骤九、web请求调用返回。利用本发明可以自动注入用户上下文信息,在保证会话机制有效性的同时,确保后台核心代码(服务)与web层的完全解耦,从而保证核心业务逻辑(服务)在不同技术路线的实现机制下的可复用性(重复使用),避免造成极大资源浪费,同时也有利于后续的支持维护。


下面结合附图与具体实施方式
对本发明作进一步详细的说明图1是本发明系统的模块结构示意图;图2是本发明的一种参考实现流程图;图3是用户配置的上下文同步信息项的配置页面示意图;图4是本发明的后台服务获取用户上下文信息效果示意图。
具体实施例方式本发明的与web会话解耦自动注入用户上下文信息的服务调用系统,其模块结构示意图,如图1所示。该服务调用系统包括服务调用客户端,服务调度总控模块,一组被调用的服务。服务调用客户端,用于发起调用后台服务的请求,与服务器建立起会话连接,且在请求中还包含有用户相关信息;其中,该用户相关信息包括用户身份信息,所属组织机构,所属角色,客户端IP地址。服务调度总控模块,部署在服务器端,截获客户端发出的请求,根据请求所建立的会话中的用户相关信息,生成用户上下文信息令牌,并将用户上下文信息令牌注入客户端调用的服务(后台服务)中;在完成服务调用后,检查用户上下文信息令牌中的用户数据是否被修改,根据被修改的用户数据更新请求所建立的会话中的用户相关信息。当在根据请求所建立的会话中的用户相关信息生成用户上下文信息令牌,以及在根据用户上下文信息令牌中被修改的用户数据更新请求所建立的会话中的用户相关信息时,服务调度总控模块会从用户的同步信息项配置中读取所需要处理的用户信息项完成上述操作(生成用户上下文信息令牌及更新请求所建立的会话中的用户相关信息)。其中,同步信息配置项是允许用户自定义的。一组被调用的服务,用于在需要时使用用户上下文信息令牌中的用户数据,且能对用户上下文信息令牌中的用户数据进行修改。其中,被调用的服务是通过一组服务代码完成的。这组服务代码从用户上下文信息令牌中获取到用户数据后进行相应的业务处理。其中,上述用户上下文信息令牌,是由处理代码完成的。该用户上下文信息令牌提供上下文信息的处理接口供外部调用,用以进行上下文信息的读取和写入操作,在发生写入操作后对被修改的信息项进行标记。对于上述与web会话解耦自动注入用户上下文信息的服务调用系统,其实现方法,如图2所示,具体的包括步骤步骤一、服务调用客户端的用户发起web请求调用后台服务;步骤二、服务调度总控模块获取用户配置的上下文同步信息项,如果没有定义信息项,则跳过步骤三;其中,用户配置的上下文同步信息项的配置页面示意图如图3所示。 从图3中的示例可知,用户指定了需要在web会话和用户上下文信息令牌中进行同步的当前用户身份(Iogirmame)、用户所属角色(userPost)等信息项;步骤三、服务调度总控模块将web会话信息中需要同步的信息项数据同步至用户上下文信息令牌中;该步骤中,服务调度总控模块根据步骤二中用户配置的同步信息项,从 web会话中获取信息项的值,构造用户上下文信息令牌,将这些信息项和其值放入此用户上下文信息令牌中;步骤四、服务调度总控模块将用户上下文信息令牌注入后台服务供使用,即将生成的用户上下文信息令牌写入服务运行所在的当前线程空间(Threadlocal),使得服务可以对用户上下文信息令牌进行操作;该步骤中体现了自动注入用户上下文信息;步骤五、服务调用,服务代码使用并维护用户上下文信息令牌中的用户数据;该步骤中,通过服务调用步骤,可以实现完全与web会话解耦的稳定、独立的核心业务逻辑;步骤六、服务调度总控模块监控是否发生用户上下文信息令牌中的用户数据修改,如果否,则跳过步骤七、步骤八;步骤七、服务调度总控模块获取用户配置的上下文同步信息项,如果没有定义信息项,则跳过步骤八;
步骤八、服务调度总控模块将发生修改的用户上下文信息令牌中需要同步的信息项数据同步至web会话信息中;步骤九、web请求调用返回。上述用户上下文信息令牌的典型处理代码片段示例如下首先从用户上下文信息令牌中获取修改过的数据项;然后根据用户配置的上下文同步信息项,判断此数据项是否需要同步至web会话中;如果需要,将此信息项内容写入web会话中。*根据被修改的用户数据更新会话中的用户相关信息.*氺Oparam request the request*/public static void service2ffeb(HttpServletRequest request) {if (logger. isDebugEnabled ()) {logger, debug ( " service2ffeb (HttpServletRequest) -getData =〃 +getData ());}//获取web会话HttpSession session = request. getSession();H从用户上下文信息令牌中获取修改过的数据项Map outSession = (Map) getOutSession ();if (outSession ! = null) {for (Iterator it = outSession. keySet(). iterator (); it. hasNext () ;) {String key = (String) it. next ();if(needSync(key)) {//判断此数据项是否需要同步至web会话中Object value = outSession. get(key);session. setAttribute (key, value) ;//信息项内容写入 web 会话}}}Map outRequest = (Map) getOutRequest ();if (outRequest ! = null) {for (Iterator it = outRequest. keySet(). iterator (); it. hasNext () ;) {String key = (String) it. next ();if (needSync(key)) {Object value = outRequest. get(key);request. setAttribute(key, value);}
7
}}}下面是一个本发明的典型应用场景用户发起服务调用请求,欲对页面信息进行维护;在服务调用客户端建立的会话信息中,指明了当前用户身份等信息;服务调度总控模块调度实际的服务代码提供服务;在此之前,服务调度总控模块构造用户上下文信息令牌,并根据配置的同步信息项将当前用户身份等信息同步至用户上下文信息令牌中,同时将此令牌注入后台服务线程空间;后台服务代码进行相应的维护操作,同时从所运行的线程空间中获取用户上下文信息令牌,并从令牌中获取当前用户身份信息以记录操作日志。 典型的服务代码如下所示public EiInfo insert (Eilnfo inlnfo){TEDFA00 tedfaOO = new TEDFA00 ();PlatMessageLogger. IogMessage(EPResource. EP_1000,new String[]{‘‘页面信息〃,‘‘新增〃 });int i = 0;for(i = O ;i < inlnfo. getBlock(DATA_BL0CK_ID) · getRowCount () ;i++){tedfaOO. fromMap(inlnfo. getBlock(DATA_BL0CK_ID). getRow(i));H从用户上下文信息令牌(而不是会话)中获取当前用户身份信息String userld = String. valueOf(UserSession. getLoginName());tedfaOO. rec_creator = userld ;dao. update (" tedfaOO. insert" ,tedfaOO);}inlnfo. setMsgByKey(EPResource. EP_1000, new String[]{String. valueOf (i), 〃新增〃 });return query(inlnfo);}按照上述步骤,可以完成后台服务与web会话的解耦及用户上下文信息自动注入。如图4所示,后台服务代码在与web层完全解耦的情况下,获取到了当前的用户身份信息(admin),并完成了操作日志的记录。本发明确保后台核心代码(服务)与web层的完全解耦,从而保证核心业务逻辑(服务)在不同技术路线的实现机制下的可复用性,避免造成极大资源浪费,同时也有利于后续的支持维护。因此,本发明用途广泛,如可应用于宝钢股份一体化系统、宝钢集团统一会计系统、宝钢钢贸现货平台、宝信科技创新管理系统、虹桥综合信息管理系统、世博交通信息管理系统等几十个大中型项目中。
权利要求
1.一种与web会话解耦自动注入用户上下文信息的服务调用系统,其特征在于包括服务调用客户端,用于发起调用后台服务的请求,与服务器建立起会话连接,且在请求中还包含用户相关信息;服务调度总控模块,部署在服务器端,用于截获客户端发出的请求,根据请求所建立的会话中的用户相关信息,生成用户上下文信息令牌,并将用户上下文信息令牌注入客户端调用的服务中,在完成服务调用后,检查用户上下文信息令牌中的用户数据是否被修改,根据被修改的用户数据更新请求所建立的会话中的用户相关信息;一组被调用的服务,用于在需要时使用用户上下文信息令牌中的用户数据,且能对用户上下文信息令牌中的用户数据进行修改。
2.如权利要求1所述的与web会话解耦自动注入用户上下文信息的服务调用系统,其特征在于所述服务调用客户端中,用户相关信息包括用户身份信息,所属组织机构,所属角色,客户端IP地址。
3.如权利要求1所述的与web会话解耦自动注入用户上下文信息的服务调用系统,其特征在于所述被调用的服务是通过一组服务代码完成的,这组服务代码从用户上下文信息令牌中获取到用户数据后进行相应的业务处理。
4.如权利要求1所述的与web会话解耦自动注入用户上下文信息的服务调用系统,其特征在于所述用户上下文信息令牌,是由处理代码完成的;该用户上下文信息令牌提供上下文信息的处理接口供外部调用,用以进行上下文信息的读取和写入操作,在发生写入操作后对被修改的信息项进行标记。
5.如权利要求1所述的与web会话解耦自动注入用户上下文信息的服务调用系统,其特征在于所述的服务调度总控模块中,根据请求所建立的会话中的用户相关信息生成用户上下文信息令牌,以及在根据用户上下文信息令牌中被修改的用户数据更新请求所建立的会话中的用户相关信息,是通过服务调度总控模块从用户的同步信息项配置中读取所需要处理的用户信息项完成的。
6.如权利要求5所述的与web会话解耦自动注入用户上下文信息的服务调用系统,其特征在于所述同步信息配置项是允许用户自定义的。
7.如权利要求1所述的与web会话解耦自动注入用户上下文信息的服务调用系统,其特征在于所述的服务调度总控模块,是将生成的用户上下文信息令牌写入服务运行所在的当前线程空间,使得服务可以对用户上下文信息令牌进行操作。
8.如权利要求1-7任意一项所述的与web会话解耦自动注入用户上下文信息的服务调用系统的实现方法,包括步骤步骤一、服务调用客户端的用户发起web请求调用后台服务;步骤二、服务调度总控模块获取用户配置的上下文同步信息项,如果没有定义信息项, 则跳过步骤三;步骤三、服务调度总控模块将web会话信息中需要同步的信息项数据同步至用户上下文信息令牌中;步骤四、服务调度总控模块将用户上下文信息令牌注入后台服务供使用;步骤五、服务调用,服务代码使用并维护用户上下文信息令牌中的用户数据;步骤六、服务调度总控模块监控是否发生用户上下文信息令牌中的用户数据修改,如果否,则跳过步骤七、步骤八;步骤七、服务调度总控模块获取用户配置的上下文同步信息项,如果没有定义信息项, 则跳过步骤八;步骤八、服务调度总控模块将发生修改的用户上下文信息令牌中需要同步的信息项数据同步至web会话信息中; 步骤九、web请求调用返回。
9.如权利要求8所述的与web会话解耦自动注入用户上下文信息的服务调用系统的实现方法,其特征在于所述步骤三中,服务调度总控模块根据步骤二中用户配置的上下文同步信息项,从web会话中获取信息项的值,构造用户上下文信息令牌,将这些信息项和其值放入此用户上下文信息令牌中。
全文摘要
本发明公开了一种与web会话解耦自动注入用户上下文信息的服务调用系统及方法。该系统包括服务调用客户端,服务调度总控模块,一组被调用的服务。该方法包括用户发起web请求调用后台服务;获取用户配置的上下文同步信息项;将web会话信息中需要同步的信息项数据同步至用户上下文信息令牌中;将用户上下文信息令牌注入后台服务供使用;服务调用,服务代码使用并维护用户上下文信息令牌中的相关信息;监控是否发生用户上下文信息令牌的修改;将发生修改的用户上下文信息令牌中的信息项数据同步至web会话中;web请求调用返回。本发明确保后台核心代码与web层的完全解耦,保证核心业务逻辑在不同技术路线下的可复用性。
文档编号H04L29/06GK102480464SQ20101055691
公开日2012年5月30日 申请日期2010年11月24日 优先权日2010年11月24日
发明者仲跻炜, 周明, 胡兵, 赵刚 申请人:上海宝信软件股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1