CAS單點登陸,URL多出個參數jsessionid導致登陸失敗問題


目錄:

1.定位問題

2.問題產生的原因

3.解決問題

 

一 定位問題

  首先,如下圖所示:輸入到地址欄的地址被302重定向到單點登錄地址,地址由Response Headers中的參數Location所指定,勾選Preserve log,保存跳轉之前的請求軌跡。

  接下來,如下圖所示:瀏覽器訪問帶 ?service=*** 的單點登錄地址來請求登錄頁,在返回的Response Headers中有參數Set-Cookie,在本地cookie中設置了CASTGC,設置了cookie的有效時間。問題就出在了這個地方,如果瀏覽器本地禁止了寫cookie操作,那么set-cookie並不會成功;那么會話的jsessionid信息會通過url重寫的方式,傳送到CAS 服務端,來保持通話。

 

二 問題產生的原因

  通過Preserve log對上一步提交流程的跟蹤發現,定位到問題產生的原因在於:客戶端禁用cookie的情況下重寫URL。重寫URL是用封號將jsessionid緊跟在請求地址之后,在訪問參數之前的動作。

  對於客戶端禁用cookie,除了重寫URL,還有表單隱藏字段的方法來傳遞sessionid。

三 解決問題

  在web.xml中添加如下配置文件:

<session-config>
  <tracking-mode>COOKIE</tracking-mode>
</session-config>

 四 問題補充

  內存cookie和硬盤cookie:內存cookie沒有expires屬性,關閉瀏覽器后再重新打開頁面,就會丟失。硬盤cookie設置了expires屬性,此時cookie將保存到硬盤上。

  如何禁用URL重寫,參考:https://fralef.me/tomcat-disable-jsessionid-in-url.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM