java 单点登录 实例_JAVA项目中单点登录实例

一、前言

接手的JAVA项目是以Spring3.0

、Struts2、Ext

Js4.0、Ibatis搭建起来的交易系统。此系统由业务操作员发起业务请求,后台进行处理并把数据返回给前台的典型业务系统。但此系统没有做到单点登录控制,由此带来一些安全性的隐患。典型例子为不同业务员可以在一台终端进行登录,但后台记录交易流水中的业务操作员为后登录柜员号,故流水记录有不准确信息。

为了保证数据信息的准确性,克服旧系统中的不安全性隐患,有必要对业务登录情况进行控制。现在有一些子系统能完成单点登录的控制,例如spring

security

等。但使用这些框架要进行组件管理及配置开发,同时使的项目比较庞杂。通过分析现有应用系统的现状,利用现有框架的特点加以控制达到技术要求的目的是最有效的方法。

二、技术分析

1.

系统中前后台联系

系统的前台使用Extjs进行数据的展示,前后台使用session

来进行联系,后台在session中保存柜员信息,Session中唯一键值为Session Id

.

2. 单点登录相关情况

系统的登录情况的控制,总结起来有三类:

a. 同一用户在不同终端上登录,最早登录用户不能进行业务处理。

b. 不同用户在同一终端上登录,最早登录用户不能进行业务处理。

c. 相同用户在同一终端上登录,互相不影响业务处理。

对于如上的前两种情况,需要对系统进行改造加以控制。

3.对于第一种情况(同一用户在不同终端上登录,最早登录用户不能进行业务处理)的分析

用户登录时产生新的session  Id , 同一用户在不同终端上登录时会产生两个Session

Id.只有最新的session 才是有效的。如果我们实时记录柜员对应的最新的Session Id ,

对于后台进程中非最新的进行剔除操作即可。

为此我们建立一张记录表,来记载柜员登录时的最后的Session Id.

增加表CDC_USER_LOGIN_CTRL存储用户和登录SESSION_ID关联关系。

名称

含义

类型

字段描述及说明

USER_ID

柜员代码

VARCHAR2(10)

N

SESSION_ID

Session_id

VARCHAR2(100)

柜员登录时session_id

LAST_LOGIN_TIME

上次登录时间

DATE

FLAG

标志

VARCHAR2(4)

暂时不用

REMARK

备注

VARCHAR2(100)

暂时不用

如果柜员登录时表中没有记录,插入 一条记录,否则修改记录中的SESSION_ID.

后台根据此表判断有效的进程来控制此种情况。具体处理为后台根据session中定义的柜员,取到CDC_USER_LOGIN_CTRL相应的记录,如果数据表中记载的SESSION_ID和进程的SESSION_ID一致则为有效进程,否则为无效进程则进行剔除处理。此种算法类似反转查找处理。

4.对于第二种情况(不同用户在同一终端上登录,最早登录用户不能进行业务处理)的分析

由于两个进程都是同一Session,也即使用同一Session Id

。CDC_USER_LOGIN_CTRL表中存储的两个用户对应的Session

Id也相同。此种情况下,后台进程无法判断哪个为有效进程。

但后台Session中存放的是最后登录的柜员名,如果知道前台发起的处理是哪个操作员,此问题即可解决。在旧系统中柜员登录时,前台会记录柜员号,这样只要前台每次发请求时,带上柜员号,然后后台进程取到柜员号,和Session中记录的柜员号比较,只有一致的进程才是有效进程。

前台使用的Ext Js

4.0的技术。我们可以拦截所有向后台发送的ajax请求,在ajax处理之前,带上柜员号参数。如下为处理细节。

Ext.util.Observable.observe(Ext.data.Connection);

Ext.data.Connection.on('beforerequest',

function(con, options)

{

var tmp_str = Ext.Object.toQueryString(options.params);

tmp_str=tmp_str+"&CheckUser="+user_id;

//console.log("debug2",tmp_str);

options.params=Ext.Object.fromQueryString(tmp_str);

//console.log("debug3",options.params);

})

三、技术实现

1. 柜员登录操作时,增加CDC_USER_LOGIN_CTRL记录,保存用户名及Session Id对应关系

2. 后台的web拦截器中增加检查事项,检查如上单点控制的前两项。

3. 前台主控中增加ajax拦截处理,增加柜员号参数。

四、小结

如上对现有架构的“轻量”改造,达到了单点登录的控制。这充分体系了JAVA架构技术处理的思想,合理运用架构的层次,架构上精心的设计,能达到“事半功倍”的效果。同时也提醒我们重视现有技术架构上的扩充及发展,虽然JAVA架构的多样性带来多样的考虑,保持其架构的“轻量”和“适度”是处理架构的首要出发点。

欢迎技术同仁进行交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值