手把手教Apereo CAS5.2.3 登出问题跟踪流程,算是源码解析吧

顺手贴上CAS 5.2.X官方文档:https://apereo.github.io/cas/5.2.x/index.html
hugeo的CAS系列:https://blog.csdn.net/u010588262/article/category/7548325
DEMO下载:
part1: https://download.csdn.net/download/u010588262/10327539
part2:https://download.csdn.net/download/u010588262/10372828

在服务端开发自己的功能

今天新读者问为什么自己在服务端写的controller,访问的时候跳转到了登录页面,后来了解到他的版本是4.1.7,我没研究过4的版本,但是从之前找资料来看,旧版和新版差别还是比较大的,不排除旧版把非endpoint的请求都指向了登录页面的可能性,新版本也许为了方便用户整合自己的功能做了改进,但是也有一些需要注意的地方详细请看上篇日志

在此也是再次建议遇到此类问题不用花费太多时间,只要单点登录登出的功能没有问题,其他的功能没必要非要整合在服务端应用中。用个nginx就把一个域名,不同的路径指向tomcat的两个应用嘛,用户用起来无感知。

登出有问题

一个老读者说他无法登出了,帮他找问题到了现在正好0:00了,帮他摸清了流程供他自己调试定位,这里把定位的过程说一下,也许对大家自己找其他问题会有启发。
读者的问题是服务端登出了,客户端还是处于登录状态:

1. 客户端有单点登出的filter吗?

这里写图片描述
客户端必须有这个filter并且是在web.xml的最上面才可以
单点登出的原理是,服务端收到登出请求时(请求中肯定会带tgt cookie),会向通过此tgt登入成功的service url(也就是所有通过此tgt登录成功的客户端)发出登出请求,此请求会有特殊的标记被客户端的filter捕获到,也就登出了

现在发现客户端是有filter的,那该去服务端找找问题了,我们打好断点准备接下来的测试
这里写图片描述

2.查看登出流程 logout-webflow.xml

登录和登出的流程使用spring-webflow的,文件在哪不赘述了,现在好晚了好困啊,平时10点多睡觉的啊!不知道的去看上篇博客谢谢!
虽然我也不太懂webflow,但是大概意思理解,比如这个:
这里写图片描述

action-state就是一个操作呗,id是取个名字,evaludate是执行的操作,transition是根据操作的结果指向其他action-state吧(大概描述,不准确)
旧版本的CAS的配置文件很齐全,那个expression,哪个var对应哪个类直接写在xml文件中的,找起来也方便,新版本大多写在JAVA类里了,xml里只保留大致框架,找起来就比较麻烦。
这里也直接告诉大家去哪里找:
这里写图片描述
这里就可以找到对应的Action类了。

3.找哪里向客户端发出了请求

我一开始去logoutAction调试,但是发现进入这个类的时候,客户端已经收到了登出请求。
那再往前找找,看到了terminateSessionAction这个东西,看名字也靠谱,结束session的,果然是有发现
这里写图片描述
其实到这里一步一步走,结合客户端什么时候收到请求就知道了,这里还有点特殊情况是,请求貌似是异步的,所以也纠结了一会。
一开始以为是下面的红框destroyApplication结束了客户端会话,后来定位到是上面那个红框处,获得的logoutRequest就是向相应的客户端发出的登出请求

再详细跟进去看到performLogout这个方法:
这里写图片描述
看参数tgt里面有service列表,就是通过这个tgt登录成功的所有客户端,对这个列表里的客户端依次发送登出请求

这里写图片描述
这里已经发过请求了,结果也有了SUCCESS,那我们可以定位到上面一句performLogoutForTicket

最后定位到了这个类的这个方法发出请求:
这里写图片描述
这里写图片描述
注意红框上面第二行的最后有个关键词asynchronous,异步的意思吧,之前调试的疑惑也有了解释了

就到这了,睡觉!

猜你喜欢

转载自blog.csdn.net/u010588262/article/details/80201983