1. 程式人生 > >CAS單點登入成功,有的請求正常,有的請求卻報錯no ticket and no assertion found

CAS單點登入成功,有的請求正常,有的請求卻報錯no ticket and no assertion found

公司專案用到了CAS單點部署。登入成功能夠進入系統,且功能使用都正常。但很奇怪的是,有一個請求,一直無法請求到後臺,後臺報錯是:no ticket and no assertion found。這個報錯表面看起來是票據未找到,是單點登入配置或session的問題。但是其他請求都能成功且功能使用也正常,唯獨它一個請求不行,所以排除了單點登入配置和session問題。真是個神奇的坑爹的問題,查了很久,終於找到了原因,以作記錄,預防後面再次遇坑,也希望能夠遇到同樣問題的朋友一個參考。

其實,原因找到以後也非常簡單。這個請求是用$.post請求的後臺。jQuery的$.post預設是以formData的方式提交引數的:

  

而,我用的3.4.1版本的CAS驗證票據的filter核心是從request中取session。以formData的方式提交引數,CAS驗證時無法正確獲取request和session,故而報錯no ticket and no assertion found。

只需要將$.post的請求改成ajax請求,並且在加上配置contentType: "application/json",即可:

    

這樣修改以後,引數就以request Payload方式提交了。CAS正常獲取到session和其中的驗證資訊,問題解決。

初次使用CAS,如解釋有誤請指正。