当前位置: 代码迷 >> Java Web开发 >> Yale CAS单点登录有关问题
  详细解决方案

Yale CAS单点登录有关问题

热度:529   发布时间:2016-04-17 00:21:15.0
Yale CAS单点登录问题
在单点登录时,如果A应用已登录,访问B应用时。

Yale CAS的单点登录机制是:
用户访问单点登录客户端时,如果session.getAttribute("edu.yale.its.tp.cas.client.filter.user") == null,并且request中的ticket也为空,会执行以下步骤
1. 客户端-->服务器端 https://xx.com/login
2. 如果已登录,单点登录的login会调回,并带来ticket。
3. 客户端调用服务器端的ServiceValidator得到登录的username。放到session中。
4. 继续后面的工作。


目前有多个客户端需要用到单点登录机制,但登录需要不是强制的(用户想登录就登录),而且访问量巨大。如果用现有的CAS Filter,如果还是访问单点登录服务器的login页面(而且不是强制用户登录嘛),或者其他转到单点登录服务器的方式。会很挫,但现在单点登录是基于Cookie的,必须客户端自己访问才可以得到Ticket。。。

因为登录可能共享给合作方的,所以共享cookie不可行,忘了补充了。。。

我现在想单点登录服务器做一种机制,将用户request的唯一信息(ip、浏览器等信息组合出来的)、Ticket的对应信息放在Hashtable中。这样就可以判断是否同一个用户、同一个浏览器登录了。然而貌似不大可行,因为根据HttpServletRequest得不到足够信息保证用户唯一性。。。

有没有更好的机制?请赐教

------解决方案--------------------
要用CAS Filter肯定得登陆,但是可以换个角度思考

登录需要不是强制的(用户想登录就登录)
这点可以设个公共的账户以供匿名登陆,如ftp的anonymous账户就是如此
当转到登陆页后,如果用户选择跳过,则页面上自动填入anonymous账户登陆
当然这个账户在你的系统中肯定受到权限系统的控制,这就达到了“不强制”的效果

你提到的"登录可能共享给合作方"不明白是什么意思


------解决方案--------------------
用 CAS 需要写session.getAttribute? 请问跨域了怎么办?