一、前言
接手的JAVA项目是Spring3.0
、Struts2、Ext
Js4.0、Ibatis构建的交易系统。 该系统是业务运营商发起业务请求,在后台进行处理,并将数据返回前台的典型业务系统。 但是,该系统不能进行单点登录控制,存在安全隐患。 典型的例子是,不同的业务员可以登录一个终端,但后台记录交易流程的业务操作人员以后会登录柜员号码,因此流程中记录了不准确的信息。
为了保证数据信息的正确性,克服旧系统中的安全隐患,必须控制业务注册情况。 有一个子系统可以完成单点登录控制,如spring
安全
等等。 但是,使用这些框架管理组件和开发配置会使项目变得复杂。 通过分析现有APP应用系统的现状,利用现有框架的特点进行控制,达到技术要求是最有效的方法。
二、技术分析
1.
系统中的后台联系
系统前台使用Extjs进行数据展示,前台后台使用session
联系并在后台将文件柜成员信息保存到session中。 session的唯一键值是SessionId
水平。
2 .单点登录相关情况
系统登录状况的控制共有3种。
a .同一用户登录到不同的终端,最早登录的用户不能进行业务处理。
b .不同用户登录同一终端,最早登录的用户不能进行业务处理。
c .同一用户登录同一终端,互不影响业务处理。
针对上述前两种情况,需要对系统进行改造和控制。
3 .对第一种情况(同一用户登录不同终端,最早登录的用户无法处理业务)的分析
用户登录时将生成新的会话id,而同一用户在不同的终端上登录时将生成两个会话
Id .只有最新的session有效。 当实时记录与机柜成员对应的最新会话id时,
对于后台进程中不最新的,进行剔除操作即可。
因此,创建一个记录表,其中包含文件柜成员登录时的最后一个会话id。
添加表CDC_USER_LOGIN_CTRL存储用户与登录SESSION_ID的关联。
名字
意思是
类型
字段的说明和说明
USER_ID
柜码
是varchar2(10 )
n
SESSION_ID
Session_id
是varchar2(100 )
登录机柜时的session_id
LAST_LOGIN_TIME
上次登录时间
日期
标志
标记
虚拟角色2 (4) )。
暂时不用
重标记
备注
是varchar2(100 )
暂时不用
如果文件柜成员登录时表中没有记录,请插入记录。 否则,更改记录的SESSION_ID。
在后台,您可以根据此表确定并控制有效进程。 具体处理是基于后台session中定义的机柜,获取与CDC_USER_LOGIN_CTRL相应的记录,并根据数据表中记载的SESSION_ID和进程的session 该算法类似于反转搜索处理。
4 .分析第二种情况(不同用户登录同一终端,最早登录的用户无法处理业务)
由于两个进程都是相同的会话,因此即使使用相同的会话id。 对应于存储在CDC_USER_LOGIN_CTRL表中的两个用户的Session
Id也一样。 在这种情况下,后台进程无法确定哪个进程有效。
但是,如果后台会话包含上次登录的文件柜的成员名称,并且您知道前台启动的操作是哪个操作者,则可以解决此问题。 在旧系统中,当机柜成员登录时,前台会记录机柜成员编号。 因此,只有在前台每次提出请求时都会携带机柜成员编号,在后台进程中获取机柜成员编号,并与Session中记录的机柜成员编号进行比较,一致的进程才是有效的进程。
前台使用的Ext Js
4.0技术。 您可以阻止发送到后台的所有ajax请求,并在ajax处理之前携带机柜编号参数。 处理的详细情况如下所示。
ext.util.observable.observe (ext.data.connection );
ext.data.connection.on (' before request ',
功能(con,options ) )。
{
vartmp _ str=ext.object.to query string (options.params );
tmp _ str=tmp _ str ' checkuser=' user _ id;
//console.log('debug2',tmp_str );
options.params=ext.object.from query string (tmp _ str );
//console.log('debug3',options.params );
() )
三.技术实现
1 .在机柜成员登录操作期间,添加CDC_USER_LOGIN_CTRL记录,并保存用户名和Session Id之间的对应关系
2 .在后台web blocker中增加检查事项,检查上述单点控制的前两项。
3 .向前台主机添加ajax拦截处理,添加机柜编号参数。
四.总结
如上所述,将现有架构改造为“轻量级”,实现了单点登录的控制。 它能充分系统化JAVA架构的技术处理思想,合理运用架构层次,通过架构上的精心设计,“事半功倍”。 另外,虽然JAVA体系结构的多样性带来了多样的考虑,但保持该体系结构的“轻”和“适度”是处理体系结构的首要出发点,因此重视在现有技术体系结构上的扩展和发展
欢迎技术人员交流。