當前位置:
首頁 > 知識 > spring+shiro+cas的整合問題之循環重定向

spring+shiro+cas的整合問題之循環重定向

場景介紹:

1.CAS伺服器採用JASIG CAS 【3.5.3】

2.SHIRO【1.2.3】

3.SPRING【4.1.RELEASE】

伺服器配置的域名為www.test.com,登錄的路徑為www.test.com/cas/

客戶應用域名為localhost:8080,應用的項目地址為localhost:8080/demo/admin/main,(登錄地址為:localhost:8080/demo/admin/login).

要達到的效果是登錄項目地址自動重定向到cas伺服器登錄,然後登錄成功後轉到項目的地址。

循環重定向的問題

客戶應用的CAS攔截器配置的攔截地址和successUrl相同,導致CAS認證成功後跳轉到successUrl後依然被CAS攔截認證導致一直循環跳轉。

失敗的循環重定向需要檢查下Rleam的failUrl地址是否和loginurl相同。

注意:springmvc配置的默認地址為/admin/,以讓項目啟動即跳轉到CAS伺服器,

CAS攔截器攔截的地址最好是一個具體的地址,而不應該是同一種格式的,我的項目中就應該是

<property name="filterChainDefinitions">

<value>/admin/=cas</value>

</property>

shiroFilter中配置

<property name="loginUrl" value="http://www.test.com/cas/login?service=http://localhost:8080/demo/admin/" />

<property name="successUrl" value="http://localhost:8080/demo/admin/main" />

注意:loginUrl和successUrl是不相同的,[相同會循環跳轉].

為了能夠在登錄失敗的時候跳轉到CAS登錄,做以下配置:

<bean id="casFilter" class="org.apache.shiro.cas.CasFilter">

<property name="failureUrl" value="http://www.test.com/cas/login?service=http://localhost:8080/demo/admin/"/>

</bean>

====================================================================================================

好久沒有鼓搗shiro配置,今天又遇到一些坑,都是以前遇到過的,在此記錄,以備以後及其他小夥伴參考:

CAS Client客戶端退出後,其它的客戶端並沒有退出,請看看客戶端配置的CAS Server是否一致,我的就因為一個是localhost一個是127.0.0.1導致.

CAS Server登錄成功後,跳轉到應用時提示重定向次數過多,調試時發現和上面的情況類似.但是配置上看不出是怎麼回事.

通過回憶測試環境的步驟,進行相應的回退,發現是因為添加了sessionManager的配置導致的,

原來默認使用的是ServletContainerSessionManager沒有問題,改成自己配置的SessionManager就會重定向。

調試後發現原來是因為沒有配置SessionIdCookie的原因,導致本地項目驗證失敗重定向到CAS Server進行認證,而CAS認證成功後跳轉到本地項目,

本地項目通過TS以及獲取Session進行驗證失敗,就這樣悲劇了。解決就是加上相應的配置

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">

。。。。。

<!-- sessionManager -->

<property name="sessionManager" ref="sessionManager" />

。。。。。

</bean>

<!--<!– 自定義會話管理配置 –>-->

<bean id="sessionManager" class="cn.jely.cd.util.security.shiro.session.SessionManager">

<property name="sessionDAO" ref="sessionDAO"/>

<!-- 會話超時時間,單位:毫秒 -->

<property name="globalSessionTimeout" value="${session.sessionTimeout}"/>

<!-- 定時清理失效會話, 清理用戶直接關閉瀏覽器造成的孤立會話 -->

<property name="sessionValidationInterval" value="${session.sessionTimeoutClean}"/>

<<property name="sessionValidationSchedulerEnabled" value="true"/>

<property name="sessionIdCookie" ref="sessionIdCookie"/>

<</bean>

<!-- 指定本系統SESSIONID, 默認為: JSESSIONID 問題: 與SERVLET容器名衝突, 如JETTY, TOMCAT 等默認JSESSIONID,-->

<!–<當跳出SHIRO SERVLET時如ERROR-PAGE容器會為JSESSIONID重新分配值導致登錄會話丟失!-->

<bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie"> <constructor-arg name="name" value="JELY_SESSION_ID"/> </bean>

spring+shiro+cas的整合問題之循環重定向

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

錯誤 could not launch process: EOF 解決
為什麼我們做分散式的使用都是用Redis?

TAG:程序員小新人學習 |