預(yù)想情況
一般情況下,當(dāng)用戶登錄一個站點后鹉梨,如果長時間沒有任何動作,當(dāng)用戶再次單擊時穿稳,會被強制登出并跳轉(zhuǎn)到登錄頁面存皂,提醒用戶重新登錄。
現(xiàn)在我已經(jīng)為站點整合了CAS司草,并且已經(jīng)實現(xiàn)了單點登錄以及單點注銷艰垂,那么當(dāng)用戶使用過程中,發(fā)生了超時的情況埋虹,估計也是自動強行登出了吧猜憎,而且其他部署了CAS的站點也跟著自動登出。
上面的是猜想搔课,那么實際情況到底是什么樣的胰柑?
疑問
- CAS-Client 超時會發(fā)生什么?
- CAS-Server超時會發(fā)生什么?
- CAS-Client與CAS-Server超時時間分別該怎么設(shè)置比較好柬讨?
- 一個站點超時時崩瓤,其它站點集中被注銷了嗎?
驗證
1. CAS-Client 超時會發(fā)生什么踩官?
CAS-Client客戶端超時時間其實就是項目session的有效時間却桶,默認:30分鐘,(springboot2.x)可修改配置:
server:
servlet:
session:
timeout: 1800s
驗證方法:
a. 事前準備:
- 把webApp1的超時時間設(shè)置為1分鐘蔗牡,webApp2的超時時間設(shè)置為2小時颖系,CAS-Server默認超時時間也是2小時
- 啟動CAS-Server、webApp1辩越、webApp2
- 分別登陸webApp1嘁扼、webApp2
b. 驗證動作:
2分鐘后,我優(yōu)先單擊webApp1的網(wǎng)頁黔攒,仿佛沒有發(fā)生任何與超時相關(guān)的處理趁啸,依然可以正常訪問所有頁面。并沒有強制跳轉(zhuǎn)到登錄頁督惰。我再單擊webApp2的網(wǎng)頁不傅,也可以正常瀏覽。
又過了2分鐘姑丑,我優(yōu)先單擊webApp2的網(wǎng)頁蛤签,可以正常訪問。再此單擊webApp1栅哀,也可以正常訪問震肮。
c. 驗證結(jié)果:
- webApp1雖然超時了,但是并沒有被強制登出留拾,依然可以正常訪問戳晌。
- webApp2完全沒有收到webApp1的超時影響,也可以正常訪問痴柔。
2. CAS-Server超時會發(fā)生什么沦偎?
cas服務(wù)器超時主要指的是TGT(ticket granting ticket)超時,如果TGT時間到期咳蔚,則需要進行重新登錄豪嚎。默認是2小時。這里單位是秒
#tgt.timeToKillInSeconds是指在用戶沒有對系統(tǒng)進行任何操作的情況下谈火,7200秒之后侈询,也就是兩個小時之后TGT會過期。過期之后需要重新登錄操作糯耍。
cas.ticket.tgt.time-to-kill-in-seconds=7200
驗證方法:
a. 事前準備:
- CAS-Server超時時間設(shè)置為2分鐘扔字,webApp1超時時間設(shè)置為5分鐘囊嘉,webApp2超時時間設(shè)置為10分鐘。
- 啟動CAS-Server革为、webApp1扭粱、webApp2
- 分別登錄webApp1、webApp2
b. 驗證動作:
3分鐘后震檩,CAS-Server應(yīng)該已經(jīng)超時了琢蛤,這時我訪問webApp1,可以正常訪問恳蹲。訪問webApp2虐块,也可以正常訪問俩滥。
6分鐘后嘉蕾,CAS-server與webApp1應(yīng)該都超時了,這時訪問webApp1霜旧,頁面被強制重定向到登錄頁面了错忱。再訪問webApp2,發(fā)現(xiàn)仍然可以正常訪問挂据。
11分鐘后以清,webApp2頁超時了,這時訪問webApp2崎逃,頁面就被重定向到登錄頁面了掷倔。
c. 驗證結(jié)果:
CAS-Server的TGT超時,并不會影響到頁面的正常訪問个绍,也就是說TGT超時后勒葱,并沒有主動的銷毀客戶端的Session。
只有當(dāng)TGT超時后巴柿,并且客戶端也超時了凛虽,這時候客戶端才會主動向Cas-Server重新發(fā)起請求認證,然后發(fā)現(xiàn)TGT超時了广恢,所以重定向回登錄頁面
3.一個客戶端超時并不會影響其他客戶端的正常訪問凯旋。
3. Cas-Client與Cas-Server超時時間分別該怎么設(shè)置才比較好?
從上面兩個驗證可以發(fā)現(xiàn)钉迷,一旦客戶端通過CAS-Server認證后至非,客戶端就相當(dāng)于完全獨立了,即使再訪問客戶端的頁面糠聪,客戶端與CAS-Server之間也不會再發(fā)生任何交互或者驗證動作荒椭。
一直到客戶端強制退出或者超時后,才會主動發(fā)起認證請求枷颊,CAS-Server才會被動處理請求戳杀,判斷是需要重定向還是重新認證通過该面。
也就是說,如果服務(wù)器超時時間設(shè)置的過短信卡,并不會起作用隔缀,還是要等客戶端超時才行。
鑒于以上結(jié)論傍菇,客戶端和服務(wù)器的超時時間設(shè)置應(yīng)該為:
CAS-Server(TGT)超時時間 >= CAS-Client的超時時間
4. 一個站點超時猾瘸,其他站點集中被注銷了嗎?
從之前的驗證來看丢习,一個站點超時牵触,并不影響其他站點的正常訪問。
總結(jié)
CAS-Server和CAS-Client超時結(jié)果圖:
CAS-Server | webApp1 | webApp2 | 是否重新登錄 |
---|---|---|---|
未超時 | 未超時 | 未超時 | webApp1咐低、webApp2都不會重新登錄 |
未超時 | 超時 | 未超時 | webApp1揽思、webApp2都不會重新登錄 |
未超時 | 超時 | 超時 | webApp1、webApp2都不會重新登錄 |
超時 | 超時 | 未超時 | webApp1會重新登錄见擦、webApp2不會重新登錄 |
超時 | 未超時 | 超時 | webApp1不會重新登錄钉汗、webApp2會重新登錄 |
超時 | 超時 | 超時 | webApp1會重新登錄、webApp2會重新登錄 |