CAS单点登录登出的实现

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ynwso/article/details/47418657

        单点登录登出是门户实现方案很重要的一个环节,通过单点登录来保证一次登录访问所有的应用系统,比如常用的方案是开源的CAS单点登录解决方案,这是耶鲁大学的开源项目,详细配置请看我的博客http://blog.csdn.net/ynwso/article/category/3220653

        通常单点登录的过程应该是下面这样:

        1. 用户访问系统A,被跳转到CAS登录页面(系统A应用要有CAS的客户端包,并在系统A增加CAS的过滤器)。

        2. 用户登录 CAS成功,跳转回系统A,并附带上ST(CAS会在服务端保存TGT,并把TGT的ID作为cookie写到用户的浏览器,同时用TGT签发一个ST返回)。

        3. 系统A去CAS端验证ST,如果ST有效,则可以访问系统A

        4. 用户访问系统B, 被跳转至CAS,CAS发现有TGT的cookie值 ,于是查找是否存在有效的TGT,有则签发一个ST返回,同步骤2

        5. 系统B去CAS端验证ST,同步骤3

        登出的过程是

        1. 系统登出系统B, 系统B调用CAS的登出地址

        2.用户成功登出,CAS清除自己保存的TGT和用户的浏览器cookie,并根据之前的登入记录,分别调用系统A和B的URL,后面会跟一个参数logoutRequest

        3.系统A和系统B都被登出(A和B都应该要增加CAS的登出过滤器和session监听器,登出过滤器要在登入过滤器之前,过滤器拦截到带有logoutRequest参数的请求会执行登出操作,清除session)

        实现上述过程一般要求所有的系统都通过CAS统一登录和登出,但我们现在设计的门户要求不太一样,需求如下:

        1. 用户通过门户登录,则跳转到CAS统一入口登录,之后所有系统都可以访问

        2.用户单独登录各个系统,不会跳转到CAS,而是使用各自的登录窗口,单独登录

        我们的实现方法是配置在各个系统的登录拦截器不拦截所有的请求,而是只拦截一个特定的URL,如系统A设置CAS拦截http://ip/serverA/caslogin.jsp,如果单独登录A,不会和CAS有任何关系,如果是登录门户,则通过CAS登录,在门户里面点击系统A的链接(http://ip/serverA/caslogin.jsp)跳转到系统A,这时系统A的CAS拦截生效,会去CAS端执行单点登录的过程,获得ST,完成登录。但是这样一来,单点登出如何实现成为一个难题。

展开阅读全文

没有更多推荐了,返回首页