專利名稱:與web會話解耦注入上下文信息的服務(wù)調(diào)用系統(tǒng)及方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種注入web會話中用戶上下文信息的服務(wù)調(diào)用系統(tǒng)及方法,特別是涉及一種與web會話解耦自動注入用戶上下文信息的服務(wù)調(diào)用系統(tǒng)及方法。
背景技術(shù):
隨著計算機技術(shù)、網(wǎng)絡(luò)技術(shù)、信息技術(shù)的發(fā)展,基于web的管理信息系統(tǒng)應(yīng)運而生。如今的web技術(shù)手段越來越成熟、完善,基于B/S (Browser/Server,瀏覽器/服務(wù)器) 模式開發(fā)的信息系統(tǒng)方法越來越普及,這也將成為現(xiàn)今乃至未來很長一段時間內(nèi)的主流。web會話(session),是用于在客戶端和web服務(wù)器之間保持狀態(tài)的一種機制?;趙eb的信息技術(shù),是依賴于HTTP協(xié)議的。由于HTTP協(xié)議本身的無狀態(tài)性,給一些深入的復(fù)雜應(yīng)用帶來困擾,因此出現(xiàn)了 web會話機制用來解決此缺陷。web會話存儲需要在整個用戶訪問過程中保持其狀態(tài)的信息,例如登錄信息或用戶瀏覽web應(yīng)用程序時需要的其它信肩、ο后臺的核心業(yè)務(wù)邏輯(服務(wù)),往往也需要訪問并使用當(dāng)前會話中的用戶相關(guān)信息。目前一般的做法是,直接將web會話信息傳遞給后臺服務(wù),這導(dǎo)致的后果是,后臺核心業(yè)務(wù)邏輯(服務(wù))代碼往往與web層耦合過大。而真正的業(yè)務(wù)邏輯處理單元一旦與web會話耦合的過緊,則無法在不同的技術(shù)路線下有效復(fù)用,造成極大資源浪費,也給后續(xù)的支持維護帶來不利的影響。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是提供一種與web會話解耦自動注入用戶上下文信息的服務(wù)調(diào)用系統(tǒng)及方法。本發(fā)明可以保證核心業(yè)務(wù)邏輯(服務(wù))在不同技術(shù)路線的實現(xiàn)機制下,可重復(fù)使用。為解決上述技術(shù)問題,本發(fā)明的與web會話解耦自動注入用戶上下文信息的服務(wù)調(diào)用系統(tǒng),包括服務(wù)調(diào)用客戶端,用于發(fā)起調(diào)用后臺服務(wù)的請求,與服務(wù)器建立起會話連接,且在請求中還包含有用戶相關(guān)信息;其中,用戶相關(guān)信息包括(但不僅限于)用戶身份信息,所屬組織機構(gòu),所屬角色,客戶端IP地址。服務(wù)調(diào)度總控模塊,部署在服務(wù)器端,用于截獲客戶端發(fā)出的請求,根據(jù)請求所建立的會話中的用戶相關(guān)信息,生成用戶上下文信息令牌,并將用戶上下文信息令牌注入客戶端調(diào)用的服務(wù)中,在完成服務(wù)調(diào)用后,檢查用戶上下文信息令牌中的用戶數(shù)據(jù)是否被修改,根據(jù)被修改的用戶數(shù)據(jù)更新請求所建立的會話中的用戶相關(guān)信息;一組被調(diào)用的服務(wù),用于在需要時使用用戶上下文信息令牌中的用戶數(shù)據(jù),且能對用戶上下文信息令牌中的用戶數(shù)據(jù)進行修改。其中,被調(diào)用的服務(wù)是通過一組服務(wù)代碼完成的。這組服務(wù)代碼從用戶上下文信息令牌中獲取到用戶數(shù)據(jù)后進行相應(yīng)的業(yè)務(wù)處理。所述用戶上下文信息令牌,是由處理代碼完成的;該用戶上下文信息令牌提供上下文信息的處理接口供外部調(diào)用,用以進行上下文信息的讀取和寫入操作,在發(fā)生寫入操作后對被修改的信息項進行標(biāo)記。所述的服務(wù)調(diào)度總控模塊,在根據(jù)請求所建立的會話中的用戶相關(guān)信息生成用戶上下文信息令牌,以及在根據(jù)用戶上下文信息令牌中被修改的用戶數(shù)據(jù)更新請求所建立的會話中的用戶相關(guān)信息,是通過服務(wù)調(diào)度總控模塊從用戶的同步信息項配置中讀取所需要處理的用戶信息項完成的。其中,同步信息配置項是允許用戶自定義的。所述的服務(wù)調(diào)度總控模塊,是將生成的用戶上下文信息令牌寫入服務(wù)運行所在的當(dāng)前線程空間(Threadlocal),使得服務(wù)可以對用戶上下文信息令牌進行操作。另外,本發(fā)明還提供一種與web會話解耦自動注入用戶上下文信息的服務(wù)調(diào)用系統(tǒng)的實現(xiàn)方法,包括步驟步驟一、服務(wù)調(diào)用客戶端的用戶發(fā)起web請求調(diào)用后臺服務(wù);步驟二、服務(wù)調(diào)度總控模塊獲取用戶配置的上下文同步信息項,如果沒有定義信息項,則跳過步驟三;步驟三、服務(wù)調(diào)度總控模塊將web會話信息中需要同步的信息項數(shù)據(jù)同步至用戶上下文信息令牌中;步驟四、服務(wù)調(diào)度總控模塊將用戶上下文信息令牌注入后臺服務(wù)供使用;步驟五、服務(wù)調(diào)用,服務(wù)代碼使用并維護用戶上下文信息令牌中的用戶數(shù)據(jù);步驟六、服務(wù)調(diào)度總控模塊監(jiān)控是否發(fā)生用戶上下文信息令牌中的用戶數(shù)據(jù)修改,如果否,則跳過步驟七、步驟八;步驟七、服務(wù)調(diào)度總控模塊獲取用戶配置的上下文同步信息項,如果沒有定義信息項,則跳過步驟八;步驟八、服務(wù)調(diào)度總控模塊將發(fā)生修改的用戶上下文信息令牌中需要同步的信息項數(shù)據(jù)同步至web會話信息中;步驟九、web請求調(diào)用返回。利用本發(fā)明可以自動注入用戶上下文信息,在保證會話機制有效性的同時,確保后臺核心代碼(服務(wù))與web層的完全解耦,從而保證核心業(yè)務(wù)邏輯(服務(wù))在不同技術(shù)路線的實現(xiàn)機制下的可復(fù)用性(重復(fù)使用),避免造成極大資源浪費,同時也有利于后續(xù)的支持維護。
下面結(jié)合附圖與具體實施方式
對本發(fā)明作進一步詳細(xì)的說明圖1是本發(fā)明系統(tǒng)的模塊結(jié)構(gòu)示意圖;圖2是本發(fā)明的一種參考實現(xiàn)流程圖;圖3是用戶配置的上下文同步信息項的配置頁面示意圖;圖4是本發(fā)明的后臺服務(wù)獲取用戶上下文信息效果示意圖。
具體實施例方式本發(fā)明的與web會話解耦自動注入用戶上下文信息的服務(wù)調(diào)用系統(tǒng),其模塊結(jié)構(gòu)示意圖,如圖1所示。該服務(wù)調(diào)用系統(tǒng)包括服務(wù)調(diào)用客戶端,服務(wù)調(diào)度總控模塊,一組被調(diào)用的服務(wù)。服務(wù)調(diào)用客戶端,用于發(fā)起調(diào)用后臺服務(wù)的請求,與服務(wù)器建立起會話連接,且在請求中還包含有用戶相關(guān)信息;其中,該用戶相關(guān)信息包括用戶身份信息,所屬組織機構(gòu),所屬角色,客戶端IP地址。服務(wù)調(diào)度總控模塊,部署在服務(wù)器端,截獲客戶端發(fā)出的請求,根據(jù)請求所建立的會話中的用戶相關(guān)信息,生成用戶上下文信息令牌,并將用戶上下文信息令牌注入客戶端調(diào)用的服務(wù)(后臺服務(wù))中;在完成服務(wù)調(diào)用后,檢查用戶上下文信息令牌中的用戶數(shù)據(jù)是否被修改,根據(jù)被修改的用戶數(shù)據(jù)更新請求所建立的會話中的用戶相關(guān)信息。當(dāng)在根據(jù)請求所建立的會話中的用戶相關(guān)信息生成用戶上下文信息令牌,以及在根據(jù)用戶上下文信息令牌中被修改的用戶數(shù)據(jù)更新請求所建立的會話中的用戶相關(guān)信息時,服務(wù)調(diào)度總控模塊會從用戶的同步信息項配置中讀取所需要處理的用戶信息項完成上述操作(生成用戶上下文信息令牌及更新請求所建立的會話中的用戶相關(guān)信息)。其中,同步信息配置項是允許用戶自定義的。一組被調(diào)用的服務(wù),用于在需要時使用用戶上下文信息令牌中的用戶數(shù)據(jù),且能對用戶上下文信息令牌中的用戶數(shù)據(jù)進行修改。其中,被調(diào)用的服務(wù)是通過一組服務(wù)代碼完成的。這組服務(wù)代碼從用戶上下文信息令牌中獲取到用戶數(shù)據(jù)后進行相應(yīng)的業(yè)務(wù)處理。其中,上述用戶上下文信息令牌,是由處理代碼完成的。該用戶上下文信息令牌提供上下文信息的處理接口供外部調(diào)用,用以進行上下文信息的讀取和寫入操作,在發(fā)生寫入操作后對被修改的信息項進行標(biāo)記。對于上述與web會話解耦自動注入用戶上下文信息的服務(wù)調(diào)用系統(tǒng),其實現(xiàn)方法,如圖2所示,具體的包括步驟步驟一、服務(wù)調(diào)用客戶端的用戶發(fā)起web請求調(diào)用后臺服務(wù);步驟二、服務(wù)調(diào)度總控模塊獲取用戶配置的上下文同步信息項,如果沒有定義信息項,則跳過步驟三;其中,用戶配置的上下文同步信息項的配置頁面示意圖如圖3所示。 從圖3中的示例可知,用戶指定了需要在web會話和用戶上下文信息令牌中進行同步的當(dāng)前用戶身份(Iogirmame)、用戶所屬角色(userPost)等信息項;步驟三、服務(wù)調(diào)度總控模塊將web會話信息中需要同步的信息項數(shù)據(jù)同步至用戶上下文信息令牌中;該步驟中,服務(wù)調(diào)度總控模塊根據(jù)步驟二中用戶配置的同步信息項,從 web會話中獲取信息項的值,構(gòu)造用戶上下文信息令牌,將這些信息項和其值放入此用戶上下文信息令牌中;步驟四、服務(wù)調(diào)度總控模塊將用戶上下文信息令牌注入后臺服務(wù)供使用,即將生成的用戶上下文信息令牌寫入服務(wù)運行所在的當(dāng)前線程空間(Threadlocal),使得服務(wù)可以對用戶上下文信息令牌進行操作;該步驟中體現(xiàn)了自動注入用戶上下文信息;步驟五、服務(wù)調(diào)用,服務(wù)代碼使用并維護用戶上下文信息令牌中的用戶數(shù)據(jù);該步驟中,通過服務(wù)調(diào)用步驟,可以實現(xiàn)完全與web會話解耦的穩(wěn)定、獨立的核心業(yè)務(wù)邏輯;步驟六、服務(wù)調(diào)度總控模塊監(jiān)控是否發(fā)生用戶上下文信息令牌中的用戶數(shù)據(jù)修改,如果否,則跳過步驟七、步驟八;步驟七、服務(wù)調(diào)度總控模塊獲取用戶配置的上下文同步信息項,如果沒有定義信息項,則跳過步驟八;
步驟八、服務(wù)調(diào)度總控模塊將發(fā)生修改的用戶上下文信息令牌中需要同步的信息項數(shù)據(jù)同步至web會話信息中;步驟九、web請求調(diào)用返回。上述用戶上下文信息令牌的典型處理代碼片段示例如下首先從用戶上下文信息令牌中獲取修改過的數(shù)據(jù)項;然后根據(jù)用戶配置的上下文同步信息項,判斷此數(shù)據(jù)項是否需要同步至web會話中;如果需要,將此信息項內(nèi)容寫入web會話中。*根據(jù)被修改的用戶數(shù)據(jù)更新會話中的用戶相關(guān)信息.*氺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從用戶上下文信息令牌中獲取修改過的數(shù)據(jù)項Map outSession = (Map) getOutSession ();if (outSession ! = null) {for (Iterator it = outSession. keySet(). iterator (); it. hasNext () ;) {String key = (String) it. next ();if(needSync(key)) {//判斷此數(shù)據(jù)項是否需要同步至web會話中Object value = outSession. get(key);session. setAttribute (key, value) ;//信息項內(nèi)容寫入 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
}}}下面是一個本發(fā)明的典型應(yīng)用場景用戶發(fā)起服務(wù)調(diào)用請求,欲對頁面信息進行維護;在服務(wù)調(diào)用客戶端建立的會話信息中,指明了當(dāng)前用戶身份等信息;服務(wù)調(diào)度總控模塊調(diào)度實際的服務(wù)代碼提供服務(wù);在此之前,服務(wù)調(diào)度總控模塊構(gòu)造用戶上下文信息令牌,并根據(jù)配置的同步信息項將當(dāng)前用戶身份等信息同步至用戶上下文信息令牌中,同時將此令牌注入后臺服務(wù)線程空間;后臺服務(wù)代碼進行相應(yīng)的維護操作,同時從所運行的線程空間中獲取用戶上下文信息令牌,并從令牌中獲取當(dāng)前用戶身份信息以記錄操作日志。 典型的服務(wù)代碼如下所示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從用戶上下文信息令牌(而不是會話)中獲取當(dāng)前用戶身份信息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);}按照上述步驟,可以完成后臺服務(wù)與web會話的解耦及用戶上下文信息自動注入。如圖4所示,后臺服務(wù)代碼在與web層完全解耦的情況下,獲取到了當(dāng)前的用戶身份信息(admin),并完成了操作日志的記錄。本發(fā)明確保后臺核心代碼(服務(wù))與web層的完全解耦,從而保證核心業(yè)務(wù)邏輯(服務(wù))在不同技術(shù)路線的實現(xiàn)機制下的可復(fù)用性,避免造成極大資源浪費,同時也有利于后續(xù)的支持維護。因此,本發(fā)明用途廣泛,如可應(yīng)用于寶鋼股份一體化系統(tǒng)、寶鋼集團統(tǒng)一會計系統(tǒng)、寶鋼鋼貿(mào)現(xiàn)貨平臺、寶信科技創(chuàng)新管理系統(tǒng)、虹橋綜合信息管理系統(tǒng)、世博交通信息管理系統(tǒng)等幾十個大中型項目中。
權(quán)利要求
1.一種與web會話解耦自動注入用戶上下文信息的服務(wù)調(diào)用系統(tǒng),其特征在于包括服務(wù)調(diào)用客戶端,用于發(fā)起調(diào)用后臺服務(wù)的請求,與服務(wù)器建立起會話連接,且在請求中還包含用戶相關(guān)信息;服務(wù)調(diào)度總控模塊,部署在服務(wù)器端,用于截獲客戶端發(fā)出的請求,根據(jù)請求所建立的會話中的用戶相關(guān)信息,生成用戶上下文信息令牌,并將用戶上下文信息令牌注入客戶端調(diào)用的服務(wù)中,在完成服務(wù)調(diào)用后,檢查用戶上下文信息令牌中的用戶數(shù)據(jù)是否被修改,根據(jù)被修改的用戶數(shù)據(jù)更新請求所建立的會話中的用戶相關(guān)信息;一組被調(diào)用的服務(wù),用于在需要時使用用戶上下文信息令牌中的用戶數(shù)據(jù),且能對用戶上下文信息令牌中的用戶數(shù)據(jù)進行修改。
2.如權(quán)利要求1所述的與web會話解耦自動注入用戶上下文信息的服務(wù)調(diào)用系統(tǒng),其特征在于所述服務(wù)調(diào)用客戶端中,用戶相關(guān)信息包括用戶身份信息,所屬組織機構(gòu),所屬角色,客戶端IP地址。
3.如權(quán)利要求1所述的與web會話解耦自動注入用戶上下文信息的服務(wù)調(diào)用系統(tǒng),其特征在于所述被調(diào)用的服務(wù)是通過一組服務(wù)代碼完成的,這組服務(wù)代碼從用戶上下文信息令牌中獲取到用戶數(shù)據(jù)后進行相應(yīng)的業(yè)務(wù)處理。
4.如權(quán)利要求1所述的與web會話解耦自動注入用戶上下文信息的服務(wù)調(diào)用系統(tǒng),其特征在于所述用戶上下文信息令牌,是由處理代碼完成的;該用戶上下文信息令牌提供上下文信息的處理接口供外部調(diào)用,用以進行上下文信息的讀取和寫入操作,在發(fā)生寫入操作后對被修改的信息項進行標(biāo)記。
5.如權(quán)利要求1所述的與web會話解耦自動注入用戶上下文信息的服務(wù)調(diào)用系統(tǒng),其特征在于所述的服務(wù)調(diào)度總控模塊中,根據(jù)請求所建立的會話中的用戶相關(guān)信息生成用戶上下文信息令牌,以及在根據(jù)用戶上下文信息令牌中被修改的用戶數(shù)據(jù)更新請求所建立的會話中的用戶相關(guān)信息,是通過服務(wù)調(diào)度總控模塊從用戶的同步信息項配置中讀取所需要處理的用戶信息項完成的。
6.如權(quán)利要求5所述的與web會話解耦自動注入用戶上下文信息的服務(wù)調(diào)用系統(tǒng),其特征在于所述同步信息配置項是允許用戶自定義的。
7.如權(quán)利要求1所述的與web會話解耦自動注入用戶上下文信息的服務(wù)調(diào)用系統(tǒng),其特征在于所述的服務(wù)調(diào)度總控模塊,是將生成的用戶上下文信息令牌寫入服務(wù)運行所在的當(dāng)前線程空間,使得服務(wù)可以對用戶上下文信息令牌進行操作。
8.如權(quán)利要求1-7任意一項所述的與web會話解耦自動注入用戶上下文信息的服務(wù)調(diào)用系統(tǒng)的實現(xiàn)方法,包括步驟步驟一、服務(wù)調(diào)用客戶端的用戶發(fā)起web請求調(diào)用后臺服務(wù);步驟二、服務(wù)調(diào)度總控模塊獲取用戶配置的上下文同步信息項,如果沒有定義信息項, 則跳過步驟三;步驟三、服務(wù)調(diào)度總控模塊將web會話信息中需要同步的信息項數(shù)據(jù)同步至用戶上下文信息令牌中;步驟四、服務(wù)調(diào)度總控模塊將用戶上下文信息令牌注入后臺服務(wù)供使用;步驟五、服務(wù)調(diào)用,服務(wù)代碼使用并維護用戶上下文信息令牌中的用戶數(shù)據(jù);步驟六、服務(wù)調(diào)度總控模塊監(jiān)控是否發(fā)生用戶上下文信息令牌中的用戶數(shù)據(jù)修改,如果否,則跳過步驟七、步驟八;步驟七、服務(wù)調(diào)度總控模塊獲取用戶配置的上下文同步信息項,如果沒有定義信息項, 則跳過步驟八;步驟八、服務(wù)調(diào)度總控模塊將發(fā)生修改的用戶上下文信息令牌中需要同步的信息項數(shù)據(jù)同步至web會話信息中; 步驟九、web請求調(diào)用返回。
9.如權(quán)利要求8所述的與web會話解耦自動注入用戶上下文信息的服務(wù)調(diào)用系統(tǒng)的實現(xiàn)方法,其特征在于所述步驟三中,服務(wù)調(diào)度總控模塊根據(jù)步驟二中用戶配置的上下文同步信息項,從web會話中獲取信息項的值,構(gòu)造用戶上下文信息令牌,將這些信息項和其值放入此用戶上下文信息令牌中。
全文摘要
本發(fā)明公開了一種與web會話解耦自動注入用戶上下文信息的服務(wù)調(diào)用系統(tǒng)及方法。該系統(tǒng)包括服務(wù)調(diào)用客戶端,服務(wù)調(diào)度總控模塊,一組被調(diào)用的服務(wù)。該方法包括用戶發(fā)起web請求調(diào)用后臺服務(wù);獲取用戶配置的上下文同步信息項;將web會話信息中需要同步的信息項數(shù)據(jù)同步至用戶上下文信息令牌中;將用戶上下文信息令牌注入后臺服務(wù)供使用;服務(wù)調(diào)用,服務(wù)代碼使用并維護用戶上下文信息令牌中的相關(guān)信息;監(jiān)控是否發(fā)生用戶上下文信息令牌的修改;將發(fā)生修改的用戶上下文信息令牌中的信息項數(shù)據(jù)同步至web會話中;web請求調(diào)用返回。本發(fā)明確保后臺核心代碼與web層的完全解耦,保證核心業(yè)務(wù)邏輯在不同技術(shù)路線下的可復(fù)用性。
文檔編號H04L29/06GK102480464SQ20101055691
公開日2012年5月30日 申請日期2010年11月24日 優(yōu)先權(quán)日2010年11月24日
發(fā)明者仲躋煒, 周明, 胡兵, 趙剛 申請人:上海寶信軟件股份有限公司