Apache shiro(3)―cas + shiro配置說明
來源:程序員人生 發布時間:2015-02-06 09:08:17 閱讀次數:5465次
這篇博客我們還是繼續講如何使用,其他的我自己還需要1些時間來消化。這次由于項目的需要,將登錄從shiro中抽出來交給cas來驗證。Shiro,只負責權限的驗證。shiro在1.2版本以后加入了對cas的支持。我們先從cas入手……
SSO的概念
單點登錄( Single Sign-On , 簡稱 SSO )是目前比較流行的服務于企業業務整合的解決方案之1, SSO就是1次登錄,就能夠訪問多個相互信任的利用。而cas只是這類解決方案的1種實現。
這么說吧:大家應當都去過游樂場,通常會賣通票。就是買1張票,就能夠玩游樂場中的所有項目,而不用玩1項買1項的票。這就是單點登錄最直白的理解了:“通票”。
原理:
ok,下面就看1下,shiro+cas以后的認證進程。圖里的票據指的是,第3步用戶的驗證信息通過驗證后,cas服務器隨機生成的1個唯1的身份標識。這個票據會被存儲在閱讀器的cookie中。注:這里只是直白的說法,后面會有博客詳細這部份的進程。
下圖,表明的是1個web利用的登錄進程,這時候候用戶訪問第2個利用時可以直接拿閱讀器中的cookie去cas認證,由于利用1已證過了。因此用戶訪問第2個利用時就不需要重新登陸了。
Spring-shiro.xml的配置:
上面大概的說了1下,cas的驗證原理。下面就看看cas和shiro集成的配置。這個是基于前1篇博客的,如果不記得可以翻看前1篇博客。1下配置都已本地為例:
首先,引入Jar包。shiro-cas⑴.2.3.jar、cas-client-core⑶.2.0.jar
然后,在Spring - shiro.xml修改以下配置:
- 第1:shiroSecurityFilter修改成:
<property name="loginUrl" value="http://localhost:18080/cas/login?service=http://localhost:8080/authority-web/shiro-cas"> </property>
<property name="successUrl" value="http://localhost:8080/authorityn-web/index.jsp"></property>
<property name="filters">
<map> <!--添加cas的過濾器到shiro -->
<entry key="casFilter">
<bean class="org.apache.shiro.cas.CasFilter">
<!--配置驗證毛病時的失敗頁面 /main 為系統登錄頁面 -->
<property name="failureUrl" value="/message.jsp" />
</bean>
</entry>
</map>
</property>
<!-- 過濾器鏈,要求url對應的過濾器 -->
<property name="filterChainDefinitions">
<value>
/message.jsp=anon
/logout=logout <!--shiro登出過濾器,清算shiro存儲的緩存,用戶信息等 -->
/shiro-cas=casFilter <!--cas的過濾器的攔截規則 -->
<!--驗證所有要求,如果shiro中不存在用戶信息,則返回到loginUrl的登錄頁面 -->
/** =user
</value>
</property>
- 第2:shiroRealm的配置中添加兩個屬性,分別為cas服務器的登錄地址和cas客戶真個入口即會被攔截的地址:
<property name="casServerUrlPrefix" value="http://localhost:18080/cas"></property>
<property name="casService" value="http://localhost:8080/authorityn-web/shiro-cas"></property>
- 第3:在securityManager的配置中加入屬性:
<property name="subjectFactory" ref="casSubjectFactory"></property>
- 第4:加入casSubjectFactory Bean的配置
<bean id="casSubjectFactory" class="org.apache.shiro.cas.CasSubjectFactory" />
接著:Web.xml的配置,加入多點登出的配置,這里主要是從cas
服務器上清除用戶的登錄信息:
<listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<filter>
<filter-name>singleSignOutFilter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>singleSignOutFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
需要注意的是,這樣單點退出Shiro中的用戶信息是不會清除的,也就是說就算你點擊退出了。各個利用還是能夠正常訪問。這里首先需要在web.xml中配置項目的默許訪問地址和shiroSecurityFilter中的successUrl。否則可能會致使從退出到登錄頁面重新登錄找不到頁面的問題。那末退出的要求地址應當為:cas
服務器注銷地址+web利用退出地址作為參數。
http://localhst:18080/cas/logout?service=http://localhost:8080/itoo-authority-application-web/logout
總結:cas和shiro的集成是將shiro的只能面對單個利用的登錄抽離出來,交給cas去驗證。前面,說過cas的驗證實際上是1個“通票”的概念。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈