手把手教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,異步的意思吧,之前調試的疑惑也有了解釋了

就到這了,睡覺!

發佈了71 篇原創文章 · 獲贊 121 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章