APP下载

基于Openfire服务器的用户行为审计插件设计与实现

2016-09-08刘晓光刘剑锋兰洁

电子设计工程 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的插件制作探讨