jasig cas单点登录中的如何统一注销

laorer 2010-07-08 10:12:56


最近在做与单点登录有关的内容,
软件有
roller4.0.1
jasig CAS 3.3.2
acegi security 的 sample war
已经可以完成统一登录,但碰到以下问题

1.如何在第一次访问 roller时,就能知道用户是否登录了,
a.现在的情况是用户访问roller时,并不清楚是否已经登录了,只有在点击某一个链接时,发现没有权限才会去 cas服务器上检查是否已经登录了,如果没有就会转到 cas的登录界面,登录后转到 roller应用中,如果已经登录了则会直接转到roller的应用中,
b.我希望的是用户第一次访问roller时,就能知道是否已经登录了,如果没有登录,则继续当前的访问,当碰到需要权限时,就转到登录界面,如果已经登录了,则会在头部某个地方显示用户名

我的想法是建一个 filter过滤roller的任何一个 url,然后在首次访问时,就会往session写入一个标记,并转到cas上检查是否已经登录了,但感觉思路还是有点乱

2. 如何统一注册用户,cas只管登录,而每个应用都会包括用户的,如何在cas上注册了新用户后,也能够在roller中注册这个用户,
现在的做法是在roller中重写一个servlet,在里面把用户信息写到数据库中,但查看过 roller的Register代码后,看到里面有个 与SSO相关的代码,似乎有与注册新用户相关,请问如何调用这个现成的来注册新用户

3.如何统一注销
在roller中注销后,也可以在 cas上注销,同时也会可以 acegi sample上注销
我现在的作法是在 roller的注销页面logout-redirect.jsp 加了个 response.sendRedirect(.. cas/logout),结果是可以看到cas上的注销页面,但是再访问acegi时,结果是没有注销的,

4.另外,我没找到 cas中加入 cookie的地方,我想改变cookie,使其保存一段时间,但没找到,熟悉的告诉我一声

再次感谢
...全文
3761 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
laorer 2010-07-14
  • 打赏
  • 举报
回复
多谢各位
解决了统一注销
http://blog.csdn.net/laorer/archive/2010/07/14/5734407.aspx
colin_pxx 2010-07-08
  • 打赏
  • 举报
回复
我让我同事看了下他都懂的没回你我就没办法了
牛叔 2010-07-08
  • 打赏
  • 举报
回复
友情支持。。。
laorer 2010-07-08
  • 打赏
  • 举报
回复
^ ^我想了一下,第一个问题的意义不大,因为只有在访问某个需要权限的时候,才会去验证用户是否登录,是否有权限了,唯一的差别就是头部某个位置显示已经登录的用户名罢了

可以先不考虑
JavPer 2010-07-08
  • 打赏
  • 举报
回复
友好的顶一下
laorer 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cooljia 的回复:]
是否可以将用户角色权限什么放在cas服务器端,用户根据service+service ticket进行校验完成之后,返回用户名,并且返回权限角色,不过这样做不知道cas server是否支持,搞不好需要DIY cas server代码.hehe
[/Quote]

这个感觉还是放在cas 客户端最好,毕竟各个应用的权限可能会不相同,这样各自只需要管理自己的权限比较灵活

你给的链接还在看……
laorer 2010-07-08
  • 打赏
  • 举报
回复
OK,麻烦你了
我看看先
cooljia 2010-07-08
  • 打赏
  • 举报
回复
第二点注册用户的问题上面将的不是很清楚,补充一下,因为我们的B应用中没有角色权限的问题,所以基本上就是A应用给过来用户名B直接就拿过来用,对B来说用户名只是显示在页面的左上角以及记录操作日志。

具体统一注册还没接触过,不过CAS服务器端肯定是要有用户名和密码进行校验并且下发TGT的,至于应用端,如果你一定需要用户名,那肯定是你应用对不同用户有权限设置,我拍脑袋给一个方案(没研究实践过,如有误导,请勿责怪),
是否可以将用户角色权限什么放在cas服务器端,用户根据service+service ticket进行校验完成之后,返回用户名,并且返回权限角色,不过这样做不知道cas server是否支持,搞不好需要DIY cas server代码.hehe
cooljia 2010-07-08
  • 打赏
  • 举报
回复

1. 应该是要将roller的资源加入到CAS client filter的范围内,才可以做到
2. 最近刚刚做过一个简单的SSO,同一个域名下的两个war包做SSO,并且只能是先登录到A应用,然后无需验证登录到B应用,最简单的做法就是在B应用中读取A应用写在用户浏览器中的用户cookie就可以。

3. 可以制定logout页面,表单提交到cas 服务器端,由cas服务器端注销用户(取消tgt cookie),并且发送通知到所有应用注销session
http://blog.sina.com.cn/s/blog_51e917db01009v6n.html?retcode=0

4. 关于cookie其实是有两类,一个是ticket granting ticket cookie,另外一个是service ticket cookie,不清楚你具体是想要设置哪一类的时间,不过这个都是可以配置的,详情请见如下链接:
https://wiki.jasig.org/display/CASUM/Ticket+Expiration+Policy
https://wiki.jasig.org/display/CASUM/HOWTO+Configure+Single+Sign+On+Session+Timeout

如果能解决问题,请给多点分吧,花了好久答您老的问题:)
laorer 2010-07-08
  • 打赏
  • 举报
回复
多谢各位,顶一顶吧

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧