公司最近要整合两个产品到一起,情况是这样:
两个产品都是跟金融有关的,所有对安全性都有要求。
产品A使用的是公司自己写的框架,没怎么用开源框架,在session控制上用的是数据库存储的方式。
产品B使用的是springsecurity,session还有权限控制都是框架来做。
两个产品现在部署在不同的服务器上,数据库也是各自独立的。
要实现的目标就是,我们把两个产品整合到一个域名下面,然后只开放产品A的登陆,当在A登陆之后,同时也保持B的登陆状态,然后可以在A,B上都正常访问,同时,还要保持session同步。
传统的会话复制,效率比较低,因为每个节点都保留了一份会话数据,会话信息会在各节点之间复制。会话共享很好地解决了这个问题,会话共享顾名思义,所有的应用之间,只保留一份会话数据,这份数据可以存储在mongodb中,也可以在redis中,不存在复制时的问题,所以效率较高。
通过这段时间和bboss开发团队的交流和对bboss的实际应用,采用会话共享效率还是比较高的,而且可以在会话共享时区分哪些会话数据(用户信息)需要在应用间共享,哪些会话数据是应用私有的,很好地保证了应用间私有会话数据的私密性,并有效防止私有数据的冲突问题。
CAS是不是可以搞定?
试试bboss会话共享,我们的项目和你的情况类似,采用bboss会话共享实现了同根域名应用之间sso功能,相关资料可以查看bboss作者发布的博文:
[url=http://yin-bp.iteye.com/blog/2079685]bboss session共享架构及特点[/url]
[url=http://yin-bp.iteye.com/blog/2087308]bboss会话共享demo使用指南[/url]
[url=http://yin-bp.iteye.com/blog/2064662]bboss session共享使用方法介绍[/url]
不用session共享,也可以达到session共享的目的,单点登录功能在同一个域名下实现就很容易了,做一个sso单点登录项目(其实最主要是登录的接口),用户登录A服务器时,保存cookie与session,sso保存用户的session,token信息,当用户拿着cookie访问B服务器的时候(同一域名下,cookie是可以传过去的),过滤器发现没有session(此功能由Spring Security实现),然后就去访问sso接口,sso根据用户cookie对比存储的token信息,来确定是否允许用户登录,这样就完成了sso单点登录的功能~
我们公司项目就是这样做的~
去年搞过,用的CAS