论坛首页 Java企业应用论坛

单点登录设计

浏览 33064 次
精华帖 (1) :: 良好帖 (0) :: 新手帖 (3) :: 隐藏帖 (1)
作者 正文
   发表时间:2011-09-24  
上两周要给两个系统做单点登录,别人建议我用cookie实现,后来我一了解情况发现两个系统其实是一个系统,只是分成了两个应用,他们会发布在一个tomcat下,如果是这样,就不需要cookie了,直接设置共享session来实现这个功能。现在这个方案已经被用到系统中去了而且暂时没问题,只碰到一个问题是这样的,取到共享的session后,因为设置了过期时间,共享session其实已经过期,但就是不知道如何来决断这个过期的状态,调试状态是可以看到一个isValid的属性为false了,但是没有找着相关的方法把这个值取出来,tomcat是调用了一个isValid()的方法来取这个值,但这个方法是tomcat的包中才有的,我用java没取出来,也没多余的时间去研究tomcat的源码,所以只好通过发生的超期的异常来判断共享session已经过期。
具体的实现是登录控制器再加一个过滤器,两个系统均一样。下面是当初画的简单的图:
controller控制器:

过滤器:



退出登录:


  • 大小: 41.3 KB
  • 大小: 35.3 KB
  • 大小: 15.9 KB
   发表时间:2011-09-25  
用memcached 做 session
多方便
0 请登录后投票
   发表时间:2011-09-25  
1、又见标题党。。。

2、如果这2个外包被要求放到不同的tomcat或服务器上你不是又得换方案?
0 请登录后投票
   发表时间:2011-09-25  
首先明白共享的优缺点,我想够了!
0 请登录后投票
   发表时间:2011-09-25  
session都可以共享了,还能算单点登录么
0 请登录后投票
   发表时间:2011-09-25  
lz的sso的局限性很明显,首先是不是在一个tomcat,然后就是移植到其他应用服务器咋办。还有一点就是推出的时候,你只清空了commonsession和自身的session,那么另外一个系统的session还存在,没有实现一个站点退出全退出的sso原则。其实最好还是cookie实现,然后结合https,rsa非对称加密,账号是一个公司的根本,安全问题也是你需要考虑的,你可以使用cas,当然你也可以参照cas实现自己的sso。
0 请登录后投票
   发表时间:2011-09-25  
感觉还是用Cookie更好一些 用这种CommonSession方式的话 可移植性太差了 移植的话以后还得修改
0 请登录后投票
   发表时间:2011-09-25   最后修改:2011-09-25
可以使用独立的单点登录应用ssoApp来做,这样可扩展性和安全性会更好。
1:用户访问App1的某个URL,App1通过cookie(必须加密)去单点登录服务器验证当前用户是否已经登录,如果没有登录,则跳转到单点登录应用的登录页面,并传递用户访问的URL。
2:用户提交用户名和密码,单点登录应用验证登录成功后跳转回App1,并传递token和sign(用于防止token被篡改)。
3:App1将返回的token和sign通过接口去单点登录应用进行验证,如果验证成功跳转用户访问的URL,并写入登录成功的cookie。
4:用户退出App1,清空登录验证的cookie。

那么即使新增一个app2或app3,照样可以支持单点登录。

1 请登录后投票
   发表时间:2011-09-25  
楼主的图用什么画的。。。
0 请登录后投票
   发表时间:2011-09-25  
Hypnusds 写道
用memcached 做 session
多方便

+1
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics