在一次項目的技術選型中,選擇了easyui+cas+shiro+spring的組合,cas實現了單點登陸,這使得在一個應用中嵌入另外一個應用的頁面來展現數據所涉及到的受權方面變得簡單。ajax
因爲shiro在判斷登陸成功後會自動跳轉到登陸前訪問的頁面,這就使得在easyui這樣的框架下ajax異步加載某個片斷頁面或iframe頁面時正好登陸超時,進行登陸後就直接跳轉到了那一個片斷頁面或iframe頁面的url上了,致使了系統使用上不太友好。spring
因而決定在每次登陸成功後都跳轉回首頁,這時須要重寫shiro官方提供的CasFilter,在onLoginSuccess方法裏改用框架
WebUtils.getAndClearSavedRequest(request);
清除掉其所記錄的登陸前訪問的url信息。異步
在另一個一樣使用cas服務的應用中,須要iframe引用訪問我當前應用的某個須要受權訪問的頁面,這時跨應用的單點登陸也是一次登陸的過程,因爲我上面對當前應用的登陸修改爲了登陸成功就直接跳轉至首頁,結果致使訪問另一個應用引用我當前應用的頁面時,iframe裏引用的頁面直接跳轉到首頁了。ui
基於上面出現的問題,我決定在進行登陸時,由cas返回ticket的同時,也要返回一個標記代表是經過登陸頁正常登陸的仍是經過ticket進行單點登陸的,因而就有了我下面所研究出的CAS登陸後回傳除了ticket參數之外的其餘自定義參數。url
1、重寫CAS的如下這幾個類:3d
SamlServic類和SimpleWebApplicationServiceImpl類都是在CAS原來的類的基礎上新增getResponse的重載方法:code
CasArgumentExtractor類和SamlArgumentExtractor類的extractServiceInternal方法都是返回上面本身寫的類的實例。blog
SendTicketGrantingTicketAction類主要是添加一個參數標識(之因此在這添加是根據CAS的單點登陸訪問流程決定的):文檔
2、修改
配置文件裏的
改爲本身所寫的類。
3、修改
配置文件裏的
改爲本身的類。
4、修改
配置文件裏的
改爲本身的類。
5、配置文件
裏增長本身的條件判斷
這是本人兩三年前的乾貨了,當時把這步驟只是簡單的記錄到word文檔裏,若有不正確的地方,歡迎指正。
注:文中提到的CAS版本是3.5.2