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

目錄:html

1.定位問題web

2.問題產生的緣由瀏覽器

3.解決問題tomcat

 

一 定位問題cookie

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

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

 

二 問題產生的緣由spa

  經過Preserve log對上一步提交流程的跟蹤發現,定位到問題產生的緣由在於:客戶端禁用cookie的狀況下重寫URL。重寫URL是用封號將jsessionid緊跟在請求地址以後,在訪問參數以前的動做。3d

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

三 解決問題

  在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

相關文章
相關標籤/搜索