?

基于Openfire服務器的用戶行為審計插件設計與實現

2016-09-08 09:23劉曉光劉劍鋒蘭潔
電子設計工程 2016年13期
關鍵詞:聊天室插件視圖

劉曉光,劉劍鋒,蘭潔

(上海航天控制技術研究所 上海 201109)

基于Openfire服務器的用戶行為審計插件設計與實現

劉曉光,劉劍鋒,蘭潔

(上海航天控制技術研究所上海 201109)

針對Openfire用戶線上行為監測與審計的實際需求,設計和實現了一個基于Openfire服務器的用戶行為審計插件actionAuditor。插件由3大模塊組成,能實現用戶行為記錄、查詢、存儲、備份、導出、排序、統計分析以及免審計用戶設置等功能,插件具有體積小、部署靈活、使用簡單的特點。文章對插件的功能、架構、數據庫設計與實現做了詳細說明和闡釋,并就典型模塊做了重點分析。插件已投入實際運行,效果良好,符合預期。

Openfire;用戶行為;監測與審計;插件;設計與實現

Openfire EIM(Enterprise Instant Messaging)是一個面向企業終端用戶通信的開源軟件,支持SPARK、RTX、QICQ等常用客戶端軟件,具有功能擴展性好、符合技術趨勢、客戶端選擇余地大等特點,能實現包括文本、圖片、語音、視頻等內容的交互,滿足終端用戶兩人或多人之間的實時溝通交流之需求,在企業中有較為廣泛的應用[1-3]。上海航天控制技術研究所目前即使用該軟件作為員工日常工作交流和協同的工具,然而,該所是國防軍工涉密單位,根據保密法及軍工武器單位資格審查認證管理辦法規定,單位所有涉密信息系統或軟件均須具備安全審計功能。然而,Openfire只提供了滿足用戶通訊服務的基礎功能,無法實現對用戶線上行為監測與審計,鑒于此,該單位開發了基于Openfire服務器的用戶行為審計插件。根據要求,該插件須能對Openfire EIM終端用戶的線上指定行為進行監測與記錄,并能對這些行為記錄進行統計分析,同時,對于一些特殊用戶或賬號,還須提供免審計功能。本文將對該插件的設計與實現做詳細闡述與說明。

1 功能設計

根據該單位對Openfire EIM用戶行為審計的要求及實際情況,設計了本插件功能并將其分為了3大類,如圖1所示。

圖1 插件功能示意圖

1.1記錄功能

記錄用戶如下行為:上線、下線、創建聊天室、登入聊天室、登出聊天室、銷毀聊天室、修改聊天室主題、修改用戶昵稱、新增用戶、刪除用戶、修改用戶信息。

記錄用戶行為發生的時間、客戶端名稱及版本、JabberID、用戶IP及所在物理位置(與樓宇系統集成,可定位到用戶所在樓宇房間的具體座位)。

1.2挖掘功能

查詢:對現行記錄與歷史記錄按時間(段)、行為類型、用戶名等條件進行單一或復合查詢,查找符合指定特征的行為記錄。

存儲:在數據備份服務器不可用或發生故障時,將符合特征條件的查詢結果以Excel文件形式存儲于Openfire服務器指定位置。

導出:為遠程web登陸管理員提供了下載指定特征記錄到本地excel文件的功能,導出的文件符合指定格式。

備份:為防止行為記錄長時間大量累積達到存儲上限,管理員需要手工即時或定期自動備份數據到歷史倉庫,以保護數據安全。

排序:對現行庫、歷史庫、人員庫及展示記錄等按指定條件(如用戶名或時間等)進行排序,使感興趣的信息顯示在突出位置。

統計分析:對現行庫及歷史倉庫中的記錄,按用戶名、部門、行為類型、時間(段)、地點和客戶端名稱進行單一或復合條件下的歸類統計,以餅圖、二維表、曲線等形式直觀展示。

1.3免審功能

免審設置:插件支持對一些特殊用戶或賬號免于審計。Openfire EIM管理員既可以在全部用戶列表中選擇免審用戶,也可以通過用戶名模糊搜索進行免審設置。

免審用(賬)戶展示:以列表視圖的方式顯示免于審計的用戶或賬戶。

面審用戶信息查看:顯示免于審計用戶的賬戶狀態及個人詳細信息。

2 架構設計

2.1插件體系架構

根據設計的功能及Openfire插件開發的技術特點[4-6],并結合MVC軟件設計模式[7],設計了如圖2所示的插件體系架構。

從圖2可以看出,actionAuditor插件軟件架構分為5層,從上到下依次為視圖層、控制層、服務層、模型層/資源層、以及數據庫層,層間通過TCP/IP協議通信。

圖2 插件架構體系

視圖層:是本插件功能的web展示及人機交互層,用以顯示用戶行為記錄,以及用戶查詢、備份、存儲、統計分析等的結果,同時,該層還是本插件的人機交互入口。根據設計,本層文件包括 actionAuditor-backuplist.jsp、actionAuditor-export. jsp、actionAuditor_filelist.jsp等共計12個。

控制層:是本插件的業務邏輯控制層,控制諸如行為記錄、數據備份、數據分析等功能的業務邏輯實現,路由和決定了信息在各業務模塊及流程中的走向。該層控制用戶輸入,從視圖層讀取數據,調用并向服務層發送這些數據,并將服務層執行結果返回給視圖層。本插件的控制器為ActionManager.java。

服務層:是業務邏輯的具體實現,由控制層調用。該層獲取控制層傳遞的參數和數據后,進行加工處理,并將部分處理結果經由控制層返回給視圖層。本插件中,該層更多的是實現對數據庫的查詢、修改、更新和新增等功能。本插件服務層包括 ActionAuditorService.java、ActionAuditorServiceImpl.java和ExcelUtilServlet.java。

模型層與資源層:模型層定義了視圖展示層用到的POJO對象,對象的屬性與數據庫字段對應。本插件模型層包含Action.java與ActionFiles.java兩個文件。

資源層是本插件用到的各種腳本、圖片、lib庫等的集合,是視圖層、控制層與服務層的支持層。本插件資源層包括諸如jquery.easyui.min.js、wdatepicker.js、error-16x16.jif、servlet. jar、及jasper-complier.jar等各類支持性文件。

數據庫層:位于最低層,定義和建立了插件中的數據庫庫及表,存儲插件運行時獲取和處理的各類數據。本插件定義了actionAuditor-mysql.sql腳本,在插件編譯時靜態生成諸如ofOperatin,ofbackupStoreTbl,ofMucCreation_Temp等表,而在插件運行時,一次性動態生成諸ofOperation_bak_2015091013 0325等表。

插件運行時,這5層聯動配合,實現了業務和數據的有序流動,最終以視圖和文件的形式加以展現。

2.2關鍵類架構

圖3展示了為本插件設計的關鍵類及其間關系。

ActionAuditor是本插件的核心類,實現了 Plugin、MUCEventListener、UserEventListener和SessionEventListener 等4個接口,完成了插件環境管理、用戶行為及聊天室相關信息的記錄功能。具體地:

1)ActionAuditor類實現了Plugin接口的initializePlugin和destroyPlugin兩個方法,完成了插件加載時的環境初始化及插件銷毀時的資源清理工作。例如在initializePlugin(PluginManager manager,File pluginDirectory)方法中,使用Dispatcher實現類MUCEventDispatcher、SessionEventDispatcher 和UserEventDispatcher的addListener()方法完成了目標事件監聽器的注冊。

圖3 插件關鍵類架構

2)AcitonAuditor類實現了 MUCEventListener接口的roomCreated(JIDroomJID)、roomDestroyed(JIDroomJID)、occupantJoined(JID roomJID,JID user,String nickname)、occupantLeft(JID roomJID,JID user)、messageReceived(JID roomJID,JIDuser,Stringnickname,Messagemessage)、roomSubjectChanged(JID roomJID,JID user,String newSubject)等方法,完成了對聊天室新建、銷毀、人員進出、人員昵稱修改、消息接收、聊天室主題修改等在內的各類事件的監聽及信息的記錄。例如在重載的occupantJoined(JID roomJID,JID user,String nickname)方法中,插件通過解析roomJID參數攜帶的聊天室信息、user參數攜帶的用戶信息、以及nickname參數攜帶的用戶昵稱等信息,截獲用戶登入聊天室這一行為,經過序列化處理后,將相關信息傳入ActionManager類的行為存儲業務模塊。

3)ActionAuditor類實現了 UserEventListener接口的userCreated(Useruser,Mapparams)、userDeleting(Useruser,Mapparams)、userModified(User user,Mapparams)等方法,用于監聽并記錄包括用戶新增、刪除及用戶名、郵件或其他擴展屬性修改等在內的行為。例如在重載的 userCreated(User user,Mapparams)函數中,插件通過user參數攜帶的用戶信息,取得管理員新建的用戶名、賬戶名、組織機構、郵件地址等信息,經過序列化處理后傳入ActionManager類的行為存儲業務模塊。

4)ActionAuditor類實現了SessionEventListener接口的sessionCreated(Sessionsession)、sessionDestroyed(Session session)、anonymousSessionCreated、anonymousSessionDestroyed (Session session)、resourceBound(Session session)等方法,用于監聽并記錄注冊用戶上下線、游客上下線、session終端綁定等行為。例如在重載的sessionCreated(Session session)函數中,插件在分析并序列化處理了參數session攜帶的用戶ip、服務器ip、最近登錄時間等等信息后,將其傳入ActionManager類的行為存儲業務模塊。

此外,ActionAuditor類繼承于WebManger,具有豐富的屬性與方法,能取得包括XMPPServer、UserManager、GroupManager、LockOutManager、SecurityAuditManager、RosterManager等在內的眾多實用類,借助其中方法,本插件能進一步拓展并實現更為豐富的業務功能。

ActionManager類是本插件的業務路由器,繼承于WebBean類,接收并加工ActionAuditor類及前臺頁面傳來的信息,控制信息和業務流程的走向。該類定義了getActionsCountOfToday()、LogResults(Collection actions)、export2Excel(Collectionactions,String file)等眾多方法,實現了行為記錄存儲、歷史記錄查詢、日志記錄、排序、備份、統計分析、免審計用戶設置等所有功能的業務邏輯。

ActionAuditorServiceImpl類是本插件的實現類和功能執行主體,其中定義的方法是ActionManager業務邏輯的具體實現,這些方法接收并處理ActionManager實例調用中傳來的參數,處理過程中,與數據庫進行讀寫交互,進而實現行為數據持久化。

ExcelUtilServlet類也是插件業務實現類,用于行為記錄的導出。該類在重載的HttpServlet類doGet方法中,生成用戶行為IO數據流并寫入緩存,當用戶在前臺頁面執行導出操作時,瀏覽器即刻截取該request并調用該類,隨之將緩存中的數據流寫入Excel文件。

Action和ActionFiles是POJO類,輔助ActionAuditorServ iceImpl類實現行為記錄的web顯示。這兩個類的屬性名稱和類型與視圖及數據庫中的相應字段一致。根據需要,這兩個類均實現了其中屬性的get/set方法。

上圖展示了本插件的6個關鍵類,這些類在實例中定義了業務邏輯和實現方法,在實例間建立了繼承、實現、依賴、關聯等關系,它們相互配合實現了本插件功能。

3 數據庫設計

基于本插件功能、實現技術與算法,結合Openfire服務器軟件架構[8,9],設計了ofOperation、ofOperation_bak_yyyymmdd_h hhmmss、ofBackupStoreTbl、ofMucCD_temp、ofNotAudit_bak、ofN otAudit等共計6個(類)數據表。其中:

ofOperation:存儲用戶行為現行記錄,字段包括記錄ID,行為類型、用戶名、用戶IP、行為發生時間及用戶終端資源等,該表通過 OPERATION和解析的 MUCNAME值分別與表ofOperation_bak_yyyymmdd_hhmmss及ofMucCD_temp相關聯。

ofOperation_bak_yyyymmdd_hhmmss:用戶行為備份表,存儲自上次備份以來的所有現行記錄,每次備份單獨成一表,表名由字符串“ofOperation_bak”加備份時間組成,時間精確到時分秒hhmmss。該(類)表在執行備份操作時由系統動態生成。

ofBackupStoreTbl:行為備份記錄表,存儲每個備份的備份表名、記錄數和備份日期。

ofMucCD_temp:臨時表,為配合聊天室相關功能而建,其初始數據來自于ofMucRoom。當聊天室創建或銷毀行為發生時,該表存儲創建或銷毀的聊天室名稱、JID、標識(創建:1,銷毀:0)等信息,當創建或銷毀行為被存入ofOperation表后,該表中的相關記錄被刪除。

ofNotAudit:存儲免審計用戶,表字段包括用戶名及其免審狀態。該表初始數據來自ofUser表。

ofNotAudit_bak:免審計用戶臨時存儲表,字段同ofNotAudit。當用戶免審計狀態設置成功后,該表即被清空。

4 典型模塊分析

本插件用于對Openfire EIM用戶線上行為進行監控和審計,因此,用戶行為記錄是該插件的基礎性功能,是插件對用戶行為進行審計與統計分析的源頭。根據功能規劃,行為記錄模塊要記錄用戶的上線、下線、創建聊天室、登入聊天室、登出聊天室、銷毀聊天室、修改聊天室主題、修改用戶昵稱、新增用戶、刪除用戶、修改用戶等行為,同時要記錄這些行為相關的人員、時間、地點、終端等信息。本節將對該模塊的設計和實現進行分析。

4.1模塊結構

根據Openfire插件開發與部署的技術特點,同時結合OOD(Object-Oriented Design)[10-13]及SD(Structured Design)[14,15]設計方法,為便于實現,將本模塊劃分為了5個子模塊,其中:

環境初始化及清理子模塊:插件運行前環境實例構造及初始變量定義,同時在插件卸載時,運行環境清理及資源釋放。

注冊監聽器子模塊:環境實例及初始變量定義完成后,為監聽的幾類事件注冊監聽器。

監聽并獲取用戶行為記錄子模塊:當監聽事件一經發生,便即刻觸發本模塊捕獲事件及行為信息。根據事件及行為不同,本模塊主體功能在不同的接口重載函數中實現。

解析行為記錄子模塊:從捕獲的事件及行為信息中解析目標數據,對于無法通過解析直接得到的數據,則通過前臺與后臺運算相結合的方式獲得。

記入數據庫子模塊:對于通過解析能直接獲取的目標數據,本模塊直接將其寫入數據庫,而對于無法直接獲取的數據,則待前后臺運算后結束后補寫入庫,從而實現某一行為數據的完整記錄。

4.2主要函數及其關系

圖4是本模塊主要函數交互圖,反映了模塊主要函數間的相互調用關系及信息在其間的流轉情況。首先,ActionAuditor對象調用initializePlugin函數完成插件初始化。隨后,初始化成功后的 監聽 器對 象 在 sessionCreated(Session session)、sessionDestroyed(Session session)、roomCreated(JID roomJID)、roomDestroyed(JID roomJID)等函數中捕獲用戶上線、下線、創建聊天室、銷毀聊天室等目標信息,并同步將這些信息回傳給ActionAuditor對象。ActionAuditor對象在接收到這些信息后利用 getRoomNames(int cdFlag)、queryIPbyUserName(Collection< Map>listMap,String userName)、getRoomCreator (String roomName)等函數進行解析和校驗,最后,通過校驗的解析信息通過writeRecord(Listinfos)函數傳遞給insertAction2DB(String operation,String username,String userjid, String userip,String creationdate,String resource)函數,后者將其寫入數據庫,由此完成信息的“捕獲--回傳—解析—校驗—寫入”過程,進而實現了本模塊功能。

圖4 典型模塊主要函數關系圖

4.3難點

本模塊中,聊天室創建行為的記錄獲取是難點之一。這是由于在聊天室創建事件捕獲中,僅能得到聊天室JID及創建時間,而創建人JID及其終端信息卻無法直接獲得。此外,與普通用戶在客戶端創建聊天室不同,管理員通過前臺Web創建聊天室時,Openfire沒有將管理員信息記入相關表中,這又無形中增加了記錄獲取難度。鑒于此,為實現對所有用戶聊天室創建行為的全記錄,本插件采用了前臺操作觸發與后臺查找關聯相結合的策略,間接獲得了聊天室創建人JID及其終端信息,從而完整的記錄了聊天室創建行為信息。具體算法如圖5所示。

圖5 典型模塊聊天室創建行為記錄算法

當用戶創建聊天室時,插件首先捕獲到的是聊天室JID及創建時間,在通過合法性檢查后,將這兩個信息存入ofOperation表中作為此次創建行為記錄的一部分。隨后,當用戶在前臺將光標焦點落在本插件首頁時,將觸發插件進行信息補全機制,插件將通過查找、合法性檢查、數據解析、角色判斷等一系列計算,將此次聊天室創建行為的其余信息補寫入先前記錄。

5 運行結果

配置plugin.xml文件,在IDE eclipse中編譯,最終生成用戶行為審計插件actionAuditor。目前,該插件已上線運行10個多月,如圖6所示。自運行以來,插件已累計記錄用戶各類行為8萬余條,備份3次,生成存儲記錄2個,統計查詢50余次,設置免審計用戶20人次。actionAuditor插件已成為本單位Openfire EIM管理員監測與統計分析用戶線上行為的主要工具。

圖6 插件運行示意圖

6 結論

Openfire是基于XMPP協議的EIM服務器端的一個實現,是實時的基于web的即時消息傳輸平臺,能為企業用戶提供溝通服務。Openfire插件式開發和部署體系靈活高效,為企業開發個性化業務功能提供了良好技術支撐。

本文針對上海航天控制技術研究所對Openfire EIM用戶線上行為的監測與審計需求,基于Openfire服務器設計和開發了用戶行為審計插件actionAuditor。運行結果表明,插件能實時記錄用戶線上行為,能幫助Openfire EIM管理員查詢、備份、存儲、統計分析用戶行為數據,能查詢和設置免審計用戶,插件滿足了該單位的功能預期,提升了Openfire EIM監管水平和效率,促進了Openfire軟件在企業員工溝通交流中發揮更大作用。

此外,本插件的設計與實現還說明,基于openfire服務器開發的插件能極大豐富openfire應用生態圈,能拓展這一即時通訊軟件的業務應用范圍,使其在企業中發揮更大作用,而不僅僅只是一個即時消息傳輸平臺。下一步將在本插件已有功能基礎上設計和實現消息審計功能。

[1]Dave Cridland.Openfire 3.10.3[EB/OL].[2015-12-20].http:// www.igniterealtime.org/builds/openfire/docs/latest/documenttation/index.html.

[2]付莎.基于XMPP協議企業級IM的研究與實現[D].成都:西南交通大學,2009.

[3]苑為,陶卓彬.Openfire二次開發問題分析及解決[J].電腦編程技巧與維護,2011(6):53-55.

[4]潘鳳,王華軍,苗放,等.基于XMPP協議和Openfire的即時通信系統的開發[J].計算機時代,2008(3):85-87.

[5]Mayank Sharma.Openfire Administration:A practical stepby-step guide to rolling out a secure Instant Messaging service over your network by Mayank Sharma[M].Birmingham: packt publishing,2008.

[6]周家賢.基于XMPP協議和Openfire框架的輕量級即時通信系統服務端設計與實現[D].昆明:云南大學,2014.

[7]戴克(Paul Deck).Spring MVC學習指南[M].林儀明,崔毅,譯.北京:人民郵電出版社,2015.

[8]高翔龍.高性能的RTC服務器OpenFire[EB/OL].(2015-11-07). http://gao-xianglong.iteye.com/blog/1944234..

[9]hjm306846213.openfire處理消息流程及openfire詳細信息[EB/OL].[2015-11-22].http://wenku.baidu.com/linkurl= lZbrqpSh1MmBfHEc84BJnvVMSgMeN3SjNj7dEB--bAzhdo1Zj_MQV0aT4bMz5DriaIvI1Uak4g2EW-9HNVXNPpz-ZveOLGE-wJrm_psXKAdK..

[10]Grady Booch,Robert A.Maksimchuk,Michael W.Engle,等.面向對象分析與設計[M].3版.王海鵬,潘加宇,譯.北京:電子工業出版社,2012.

[11]楊貞萍,劉海峰,何曉苑,等.面向對象思想在無線電系統設計中的應用[J].軟件導刊,2015(2):31-34.

[12]李萍.城市地下管線信息管理系統設計與開發[J].南京郵電大學學報,2013(4):8-11.

[13]譚大海,劉興勇.面向對象分析與設計[J].科技信息,2014 (10):160.

[14]魯德.編程邏輯與結構化程序設計(原書第三版)[M].杜大鵬,龔小平,管英強,等譯.北京:水利水電出版社,2004.

[15]張緒玉.結構化面試系統的設計與實現[D].重慶:重慶理工大學,2013.

Design and implementation of users'action monitoring and auditing plugin based-on openfire server

LIU Xiao-guang,LIU Jian-feng,LAN Jie
(Shanghai Institute of Spaceflight Control Technology,Shanghai 201109,China)

Aimed on the demand of monitoring and auditing Openfire EIM users'action,designed and implemented one plugin actionAuditor to satisfy it.The plugin was composed of 3 modules,and could write-in,search,save,backup,expose,sort and statically analyze the actions,and also could set not-audited accounts.The plugin had advantages of small-size,simple deployment and easy-to-use interface.A long time of usage verified its stability and correctness.In this paper,its function design, architecture design,database design were detailed and elaborated,and one typical module was specially analyzed.

openfire;users'action;monitoring and auditing;plugin;design and implementation

TN91

A

1674-6236(2016)13-0007-06

2016-02-04稿件編號:201602017

國家科技重大專項資助項目(2011ZX04004-071)

劉曉光(1976—),男,山西祁縣人,博士,工程師。研究方向:企業信息化、信息系統開發技術。

猜你喜歡
聊天室插件視圖
自編插件完善App Inventor與樂高機器人通信
5.3 視圖與投影
視圖
Y—20重型運輸機多視圖
SA2型76毫米車載高炮多視圖
歌劇聊天室 洗洗曬曬,又是新一天
歌劇聊天室 永遠盛放的雪絨花
基于jQUerY的自定義插件開發
百萬級SUV聊天室(5人)
基于Revit MEP的插件制作探討
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合