九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
CAS、Spring Security、Ldap配置整合
    一、      CAS簡介

1.1  CAS是什么

CAS(Central Authentication Service)   Yale 大學(xué)發(fā)起的一個Java開源項(xiàng)目,旨在為Web應(yīng)用系統(tǒng)提供一種可靠的單點(diǎn)登錄解決方案(Web SSO),CAS 2004 12 月正式成為 JA-SIG 的一個項(xiàng)目。CAS 具有以下特點(diǎn):

1、  開源的企業(yè)級單點(diǎn)登錄解決方案;

2、  CAS Server 為需要獨(dú)立部署的 Web 應(yīng)用;

3、  CAS Client 支持非常多的客戶端(指單點(diǎn)登錄系統(tǒng)中的各個Web 應(yīng)用),包括 Java, .Net, PHP, Perl,等。

1.2  CAS 原理

從結(jié)構(gòu)上看,CAS 包含兩個部分: CAS Server CAS Client。

CAS Server 需要獨(dú)立部署,主要負(fù)責(zé)對用戶的認(rèn)證工作,它會處理用戶名 / 密碼等憑證 (Credentials);

CAS Client 部署在客戶端,負(fù)責(zé)處理對本地 Web 應(yīng)用(客戶端)受保護(hù)資源的訪問請求,并且當(dāng)需要對請求方進(jìn)行身份認(rèn)證時,重定向到 CAS Server 進(jìn)行認(rèn)證,下圖是 CAS 最基礎(chǔ)協(xié)議:

 

1、CAS Client 與受保護(hù)的客戶端應(yīng)用部署在一起,以 Filter 方式保護(hù)受保護(hù)的資源。對于訪問受保護(hù)資源的每個 Web 請求,CAS Client 會分析該請求的 Http 請求中是否包含 Service TicketST)和Ticket Granting tieckt(TGT)(??),如果沒有,則說明當(dāng)前用戶尚未登錄,于是將請求重定向到指定好的 CAS Server 登錄地址,并傳遞 Service (也就是要訪問的目的資源地址),以便登錄成功過后轉(zhuǎn)回該地址。用戶在第 3 步中輸入認(rèn)證信息,如果登錄成功,CAS Server 隨機(jī)產(chǎn)生一個相當(dāng)長度、唯一、不可偽造的 Service Ticket,并緩存以待將來驗(yàn)證,之后系統(tǒng)自動重定向到 Service 所在地址,并為客戶端瀏覽器設(shè)置一個 Ticket Granted CookieTGC),CAS Client 在拿到 Service 和新產(chǎn)生的 Ticket 過后,在第 5,6 步中與 CAS Server 進(jìn)行身份核實(shí),以確保 Service Ticket 的合法性。

2、在該協(xié)議中,所有與 CAS 的交互均采用 SSL 協(xié)議確保ST TGC 的安全性。協(xié)議工作過程中會有 2 次重定向的過程,但是 CAS Client CAS Server 之間進(jìn)行 Ticket 驗(yàn)證的過程對于用戶是透明的。

3CAS 如何實(shí)現(xiàn) SSO

當(dāng)用戶訪問另一服務(wù)再次被重定向到 CAS Server 的時候, CAS Server 會主動獲到這個 TGC cookie ,然后做下面的事情:

1) 如果 User 的持有 TGC 且其還沒失效,那么就走基礎(chǔ)協(xié)議圖的 Step4 ,達(dá)到了 SSO 的效果;

2) 如果 TGC 失效,那么用戶還是要重新認(rèn)證 ( 走基礎(chǔ)協(xié)議圖的 Step3) 。

 

1.3  CAS 相關(guān)詞匯及概念

TGC(ticket-granting cookie)---------授權(quán)的票據(jù)證明,由 CAS Server通過SSL方式發(fā)送給終端用戶;

KDC( Key Distribution Center ) ----------密鑰發(fā)放中心;

ST (Service ticket) ---------服務(wù)票據(jù), KDC TGS 發(fā)放, ST 只能被嘗試驗(yàn)證一次。 任何一臺 Workstation 都需要擁有一張有效的 Service Ticket 才能訪問域內(nèi)部的應(yīng)用 (Applications) 。 如果能正確接收 Service Ticket ,說明在 CASClient-CASServer 之間的信任關(guān)系已經(jīng)被正確建立起來,通常為一張數(shù)字加密的證書;

Ticket Granting tieckt(TGT) --------- 票據(jù)授權(quán)票據(jù),由 KDC AS 發(fā)放。即獲取這樣一張票據(jù)后,以后申請各種其他服務(wù)票據(jù) (ST) 便不必再向 KDC 提交Credentials(憑證或身份認(rèn)證信息) ;

Authentication Service (AS) --------- 認(rèn)證服務(wù),索取Crendential,發(fā)放 TGT;

Ticket-Granting Service (TGS) --------- 票據(jù)授權(quán)服務(wù),索取TGT,發(fā)放 ST。

 

1.4  CAS 安全性

CAS 的安全性從 v1 v3,都很依賴于 SSL,它假定了這樣一個事實(shí),用戶在一個非常不安全的網(wǎng)絡(luò)環(huán)境中使用 SSOHacker Sniffer 會很容易抓住所有的 Http Traffic ,包括通過 Http 傳送的密碼甚至 Ticket 票據(jù)。

1、 TGC 安全性

對于一個 CAS 用戶來說,最重要是要保護(hù)它的 TGC ,如果 TGC不慎被 CAS Server以外的實(shí)體獲得,Hacker能夠找到該TGC,然后冒充 CAS 用戶訪問所有授權(quán)資源。

TGC CAS Server 通過 SSL 方式發(fā)送給終端用戶,因此,要截取 TGC 難度非常大,從而確保 CAS 的安全性。但CAS 的傳輸安全性僅僅依賴于SSL 。

TGC面臨的風(fēng)險主要并非傳輸竊取,而是存活周期內(nèi)(logout前)被使用(如:離開了電腦)或竊取。

TGC有自己的存活周期??梢栽?/span> web.xml 中,通過 grantingTimeout來設(shè)置 CAS TGC存活周期的參數(shù),參數(shù)默認(rèn)是 120 分鐘,在合適的范圍內(nèi)設(shè)置最小值,太短,會影響 SSO 體驗(yàn),太長,會增加安全性風(fēng)險。

2、 ST安全性

STService Ticket)是通過Http傳送的,網(wǎng)絡(luò)中的其他人可以 Sniffer 到其他人的 Ticket 。 CAS 協(xié)議從幾個方面讓 Service Ticket 變得更加安全:

1)        ST只能使用一次:CAS 協(xié)議規(guī)定,無論ST驗(yàn)證是否成功, CAS Server 都會將服務(wù)端的緩存中清除該Ticket,從而可以確保一個 Service Ticket 不被使用兩次;

2)        ST在一段時間內(nèi)失效:假設(shè)用戶拿到ST之后,他請求服務(wù)的過程又被中斷了,ST就被空置了,事實(shí)上,此時TS仍然有效。 CAS 規(guī)定 Service Ticket 只能存活一定的時間,然后 CAS Server 會讓它失效??赏ㄟ^在 web.xml 中配置參數(shù),讓ST在多少秒內(nèi)失效。

3)        ST是基于隨機(jī)數(shù)生成的。

 

二、      Spring Security 簡介

2.1 Spring Security是什么

Spring Security開始于2003年底,那時候叫“springAcegi安全系統(tǒng)。Acegi2007年底,正式成為spring組合項(xiàng)目,被更名為“Spring Security”。

Spring Security 基于 Spring 框架,提供了一套 Web應(yīng)用安全性的完整解決方案。一般來說,Web 應(yīng)用的安全性包括用戶認(rèn)證(Authentication)和用戶授權(quán)(Authorization)兩個部分。

用戶認(rèn)證指的是驗(yàn)證某個用戶是否為系統(tǒng)中的合法主體,也就是說用戶能否訪問該系統(tǒng)。用戶認(rèn)證一般要求用戶提供用戶名和密碼。系統(tǒng)通過校驗(yàn)用戶名和密碼來完成認(rèn)證過程。

用戶授權(quán)指的是驗(yàn)證某個用戶是否有權(quán)限執(zhí)行某個操作。在一個系統(tǒng)中,不同用戶所具有的權(quán)限是不同的。比如對一個文件來說,有的用戶只能進(jìn)行讀取,而有的用戶可以進(jìn)行修改。一般來說,系統(tǒng)會為不同的用戶分配不同的角色,而每個角色則對應(yīng)一系列的權(quán)限。

對于上面提到的兩種應(yīng)用情景,Spring Security 框架都有很好的支持。在用戶認(rèn)證方面,Spring Security 框架支持主流的認(rèn)證方式,包括 HTTP 基本認(rèn)證、HTTP 表單驗(yàn)證、HTTP 摘要認(rèn)證、OpenID LDAP 等。在用戶授權(quán)方面,Spring Security 提供了基于角色的訪問控制和訪問控制列表(Access Control ListACL),可以對應(yīng)用中的領(lǐng)域?qū)ο筮M(jìn)行細(xì)粒度的控制。

 

2.3 如何控制權(quán)限

1、 概要

Spring使用由Filter組成的Chain,來判斷權(quán)限。Spring預(yù)定義了很多out-of-boxed filter供開發(fā)者直接使用。每個Filter一般情況下(有些Filterabstract的)都和配置文件的一個元素(有的情況下可能是屬性)對應(yīng)。比如:AUTHENTICATION_PROCESSING_FILTER,對應(yīng)配置文件里面的:http/form-login元素。

如果Spring提供的Filter不能滿足系統(tǒng)的權(quán)限功能,開發(fā)者可以自定義Filter,然后把Filter放在某個Filter Chain的某個位置??梢蕴鎿Q掉原有Filter Chain的某個Filter,也可以放在某個Filter之前或者之后。

總之,Spring Security采用Filter Chain模式判斷權(quán)限,Spring提供了一些Filter,也支持開發(fā)者自定義Filter。

2、 控制內(nèi)容

Spring Security提供對URL、Bean Method、Http Session、領(lǐng)域?qū)ο筮@四種內(nèi)容的控制,分別如下:

1)  URL

可以分為需要權(quán)限判斷的url,不需要權(quán)限判斷的url,登錄表單url。需要權(quán)限判斷的url,僅限于做角色判斷,就是說判斷當(dāng)前用戶是否具有指定的角色。

2)  Bean Method

Spring支持對Service layer method做權(quán)限判斷。也僅限于做角色判斷。配置方式有2種:

  Annotation寫在Java源代碼里面(Annotation),如:@Secured("ROLE_TELLER")(該方法只有具有TELLER角色的用戶能夠訪問,否則拋出異常);

  寫在配置文件里面,如:<protect method="set*" access="ROLE_ADMIN" />(該bean的所有set方法,只有具有ADMIN角色的用戶能夠訪問,否則拋出異常)。

3)  Http  Session

控制一個用戶名是否能重復(fù)登錄,以及重復(fù)登錄次數(shù),并非重試密碼次數(shù)。

4)  領(lǐng)域?qū)ο螅ù晟疲?/span>

復(fù)雜程序常常需要定義訪問權(quán)限,不是簡單的web 請求或方法調(diào)用級別。而是,安全決議,需要包括誰(認(rèn)證),哪里(MethodInvocation)和什么(一些領(lǐng)域?qū)ο螅?。換而言之,驗(yàn)證決議也需要考慮真實(shí)的領(lǐng)域?qū)ο髮?shí)例,方法調(diào)用的主體。主要通過ACL(訪問控制列表)實(shí)現(xiàn)。

 

2.4 權(quán)限控制的幾種配置方法

         Spring Security 3的使用中,權(quán)限控制有4種配置方法:

1、 全部利用配置文件,將用戶、權(quán)限、資源(url)硬編碼在xml文件中;

2、 用戶和權(quán)限用數(shù)據(jù)庫存儲,而資源(url)和權(quán)限的對應(yīng)采用硬編碼配置;

3、 細(xì)分角色和權(quán)限,并將用戶、角色、權(quán)限和資源均采用數(shù)據(jù)庫存儲,并且自定義過濾器,代替原有的FilterSecurityInterceptor過濾器,并分別實(shí)現(xiàn)AccessDecisionManager、InvocationSecurityMetadataSourceServiceUserDetailsService,并在配置文件中進(jìn)行相應(yīng)配置;(將主要考慮該方法)

4、 修改spring security的源代碼,主要是修改InvocationSecurityMetadataSourceServiceUserDetailsService兩個類。 前者是將配置文件或數(shù)據(jù)庫中存儲的資源(url)提取出來加工成為url和權(quán)限列表的MapSecurity使用,后者提取用戶名和權(quán)限組成一個完整的 (UserDetails)User對象,該對象可以提供用戶的詳細(xì)信息供AuthentationManager進(jìn)行認(rèn)證與授權(quán)使用。比較暴力,不推薦。

 

2.5 主要內(nèi)置對象或內(nèi)容

        

1、 Spring Security 默認(rèn)的過濾器順序列表

order

過濾器名稱

備注

100

ChannelProcessingFilter

 

200

ConcurrentSessionFilter

 

300

SecurityContextPersistenceFilter

 

400

LogoutFilter

 

500

X509AuthenticationFilter

 

600

RequestHeaderAuthenticationFilter

 

700

CasAuthenticationFilter

 

800

UsernamePasswordAuthenticationFilter

 

900

OpenIDAuthenticationFilter

 

1000

DefaultLoginPageGeneratingFilter

 

1100

DigestAuthenticationFilter

 

1200

BasicAuthenticationFilter

 

1300

RequestCacheAwareFilter

 

1400

SecurityContextHolderAwareRequestFilter

 

1500

RememberMeAuthenticationFilter

 

1600

AnonymousAuthenticationFilter

 

1700

SessionManagementFilter

 

1800

ExceptionTranslationFilter

 

1900

FilterSecurityInterceptor

 

2000

SwitchUserFilter

 

 

 

2、   

 

2.5 主要應(yīng)用模式

1、 自定義授權(quán)管理

自定義Filter以及相關(guān)輔助類,實(shí)現(xiàn)用戶、角色、權(quán)限、資源的數(shù)據(jù)庫管理,涉及相關(guān)接口或類說明如下:

1)  AbstractSecurityInterceptor

具體實(shí)現(xiàn)類作為過濾器,該過濾器要插入到授權(quán)之前。在執(zhí)行doFilter之前,進(jìn)行權(quán)限的檢查,而具體的實(shí)現(xiàn)交給accessDecisionManager。

2)  FilterInvocationSecurityMetadataSource

具體實(shí)現(xiàn)類在初始化時,要實(shí)現(xiàn)從數(shù)據(jù)庫或其它存儲庫中加載所有資源與權(quán)限(角色),并裝配到MAP <String, Collection<ConfigAttribute>>中。 資源通常為url, 權(quán)限就是那些以ROLE_為前綴的角色,資源為key, 權(quán)限為value。 一個資源可以由多個權(quán)限來訪問。

3)  UserDetailService

具體實(shí)現(xiàn)類從存儲庫中讀取特定用戶的各種信息(用戶的密碼,角色信息,是否鎖定,賬號是否過期等)。唯一要實(shí)現(xiàn)的方法:public UserDetails loadUserByUsername(String username)

4)  AccessDecisionManager

匹配權(quán)限以決定是否放行。主要實(shí)現(xiàn)方法:public void decide(Authentication authentication, Object object,

           Collection<ConfigAttribute> configAttributes)

//In this method, need to compare authentication with configAttributes.

  A object is a URL, a filter was find permission configuration by this URL, and pass to here.

   Check authentication has attribute in permission configuration (configAttributes)

  If not match corresponding authentication, throw a AccessDeniedException.

 

2.6 Spring Security評價

Spring Security世界里,可以區(qū)分出哪些資源可以匿名訪問,哪些需要角色權(quán)限,哪個頁面提供登錄功能;怎樣進(jìn)行用戶身份認(rèn)證,用戶的密碼如何加密。哪些資源必須使用https協(xié)議,資源和訪問端口有怎樣的對應(yīng)關(guān)系。 

下面就優(yōu)點(diǎn)和缺點(diǎn)對Spring Security進(jìn)行點(diǎn)評。

1、 優(yōu)點(diǎn)

總體說來Spring Security具有以下幾個優(yōu)點(diǎn):

1) 提供了一套權(quán)限框架,這套框架是可行的;

2) 提供了很多用戶身份認(rèn)證功能,可以節(jié)約大量開發(fā)工作;

3) 提供了角色判斷功能,這點(diǎn)既是優(yōu)點(diǎn)又是缺點(diǎn);

4) 提供了form-login、remember me等控制。

其中2、4兩點(diǎn),對于我們中國開發(fā)者,可用性并不大。我們的系統(tǒng)大多采用用戶名/密碼身份認(rèn)證模式,大多公司都有可復(fù)用代碼。form-login、remember me等這些功能,并不是難以開發(fā),而且可用之處也并不多。

2、 缺點(diǎn)

Spring Security存在以下幾個硬傷:

1) 角色被“編碼”到配置文件和源文件,這樣最終用戶就不能創(chuàng)建角色了。但最終用戶期望自己來控制角色。因?yàn)樵陧?xiàng)目實(shí)施過程中,客戶可能并不能確定有哪些角色,以及角色怎么分配給系統(tǒng)用戶。角色大多需要等到系統(tǒng)上線后,才能確定。這些編碼有:

a)  url的權(quán)限控制,<intercept-url pattern="/**" access="ROLE_USER" />

b)  java方法的權(quán)限控制,@Secured("IS_AUTHENTICATED_ANONYMOUSLY");

c)  java方法的權(quán)限控制,<protect method="set*" access="ROLE_ADMIN" />;

 

2) RBCA這種被廣泛運(yùn)用的模型,沒有在Spring Security體現(xiàn)出來;

3) Spring Security沒有提供好的細(xì)粒度(數(shù)據(jù)級)權(quán)限方案,提供的缺省實(shí)現(xiàn)維護(hù)工作量大,在大數(shù)據(jù)量情況下,幾乎不可用;

4) Spring Security對于用戶、角色、權(quán)限之間的關(guān)系,沒有提供任何一種維護(hù)界面。不過從Spring Security角度看,確實(shí)沒有必要有界面。角色創(chuàng)建、角色和權(quán)限直接的關(guān)系,都被“編碼”到配置文件和源文件了;

5) Spring Security學(xué)習(xí)難度大,配置文件還是很多。

 

 

三、      CAS ServerLDAP整合

CAS ServerLDAP整合,主要是使用LDAP來進(jìn)行統(tǒng)一認(rèn)證。

 

3.1環(huán)境需求

                   1CAS服務(wù)包:cas-server-3.3.5-release

        2、LDAPapacheds-1.5.7-setupLDAP

        3、Tomcattomcat-6.0.18

        4JDK jdk1.5+

 

3.1 搭建CAS Server

1、  生成服務(wù)器證書(以下方式包含了雙向認(rèn)證)

部署CAS3服務(wù)器端所需得ssl環(huán)境生成,預(yù)備生成文件: cacerts server.keystore client.keystoreserver.cer client.cer

1)生成服務(wù)器端庫文件 (生成的時候,第一項(xiàng)name一定要為完整計算機(jī)名稱或域名)
keytool -genkey -alias tomcat-server -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore

2)導(dǎo)出服務(wù)器端證書
keytool -export -alias tomcat-server -storepass changeit -file server.cer -keystore server.keystore 
3
)生成客戶端庫文件
keytool -genkey -alias tomcat-client -keyalg RSA -keypass changeit -storepass changeit -keystore client.keystore 
4
)導(dǎo)出客戶端證書
keytool -export -alias tomcat-client -storepass changeit -file client.cer -keystore client.keystore

5)導(dǎo)入服務(wù)器端證書
keytool -import -trustcacerts -alias server -file server.cer -keystore cacerts -storepass changeit 
6
)導(dǎo)入客戶端證書
keytool -import -trustcacerts -alias client -file client.cer -keystore cacerts -storepass changeit

將如上生成的cacerts server.keystore, client.keystore, server.cer, client.cer文件分別拷貝到cas服務(wù)器以及應(yīng)用客戶端(server.cerTOMCAT_HOME主目錄以及JAVA_HOEM/jre/lib/security文件下(每個子系統(tǒng)的tomcat也要拷貝進(jìn)去)

 

 

2、  部署CAS Server

1)           將下載后的cas-server-3.3.5-release.zip解壓后,進(jìn)入cas-server-3.3.5\modules目錄,將cas-server-webapp-3.3.5.war 重命名為:cas.war 并將它拷貝到%TOMCAT_HOME%/webapps/下;

2)           啟動tomcat后,停止tomcat,然后看到有一個cas目錄,有的話把cas.war刪除掉;

3)           修改TOMCAT 配置文件:tomcat/conf/server.xml

放開注釋改成如下內(nèi)容:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

               maxThreads="150" scheme="https" secure="true"

               clientAuth="false" sslProtocol="TLS" keystoreFile="E:\servers\tomcat-6.0.18-casServer\server.keystore" keystorePass="changeit" />

注意:證書的路徑和密碼需做對應(yīng)修改。

4)           啟動TOMCAT IE地址欄輸入:https://localhost(IP):8443/cas,如顯示如下圖,表明成功:

5)            

3.2 LDAP服務(wù)安裝

         見附件“LDAP服務(wù)安裝說明.doc”。

 

3.3 配置CAS Server LDAP

1、 修改webapps\cas\WEB-INF\deployerConfigContext.xml文件

具體文件配置:注釋用”<!-- -->

<!—注釋掉下面這行,該行主要實(shí)現(xiàn)使用用戶和密碼一致的值便可登錄,如下: -->

<!--bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" /-->

2、在剛才注釋的那個位置下面輸入:

<bean class="org.jasig.cas.adaptors.ldap.BindLdapAuthenticationHandler">

<property name="filter" value="cn=%u" />

<property name="searchBase" value="ou=Users,ou=System" />

<property name="contextSource" ref="apchedsContextSource" />

</bean>

該段內(nèi)容主要是加入LDAP的過濾條件及訪問目錄。

3、在配置文件的倒數(shù)第2行,加入如下代碼配置(主要為需要訪問的LDAP 服務(wù)地址及用戶名、密碼)

<bean id="apchedsContextSource" class="org.springframework.ldap.core.support.LdapContextSource">

<property name="userDn" value="uid=admin,ou=system" />

<property name="password" value="123456" />

<property name="pooled" value="false" />

<property name="urls">

<list>

<value>ldap://localhost:10389/</value>

</list>

</property>

<property name="baseEnvironmentProperties">

<map>

<entry>

<key>

<value>java.naming.security.authentication</value>

</key>

<value>simple</value>

</entry>

</map>

</property>

</bean>

 

3.4 驗(yàn)證CAS Server LDAP

         IE地址欄輸入https://localhost:8443/cas,并用LDAP建立的用戶名及密碼登錄,正常情況如下圖所示:

 

四、      CAS Client Spring Security整合

4.1 環(huán)境需求

    1、CAS Client cas-client-core-3.2.1.jar放入Web應(yīng)用的lib

    2、Spring Securityspring-security-cas-client-3.0.2.RELEASE.jar,在基于spring security 項(xiàng)目中加入 cas相應(yīng)的依賴jar

 

4.2 搭建CAS Client(即Spring Security應(yīng)用)

1、 導(dǎo)入服務(wù)端生成證書

復(fù)制cas服務(wù)端生成證書server.cer 到客戶端(TOMCAT_Home下),并將證書導(dǎo)入JDK,

keytool -import -trustcacerts -alias casserver -file server.cer -keystore D:\Java\jre1.6.0_02\lib\security\cacerts -storepass changeit

注此處的jre必須為JDK路徑下的jre

 

2、 配置CAS Client應(yīng)用的 web.xml

增加如下:

<!-- spring 配置文件-->

    <context-param>

       <param-name>contextConfigLocation</param-name>

       <param-value>

    classpath:applicationContext.xml,classpath:applicationContext-security.xml

       </param-value>

    </context-param>

      

    <!-- Character Encoding filter -->

    <filter>

       <filter-name>encodingFilter</filter-name>

       <filter-class>

           org.springframework.web.filter.CharacterEncodingFilter

       </filter-class>

       <init-param>

           <param-name>encoding</param-name>

           <param-value>UTF-8</param-value>

       </init-param>

    </filter>

    <filter-mapping>

       <filter-name>encodingFilter</filter-name>

       <url-pattern>/*</url-pattern>

    </filter-mapping>

      

    <!-- spring security filter -->

    <!--  DelegatingFilterProxy 是一個 SpringFramework 的類,它可以代理一個 applicationcontext 中定義的 Springbean 所實(shí)現(xiàn)的 filter -->

    <filter>

       <filter-name>springSecurityFilterChain</filter-name>

       <filter-class>

           org.springframework.web.filter.DelegatingFilterProxy

       </filter-class>

    </filter>

    <filter-mapping>

       <filter-name>springSecurityFilterChain</filter-name>

       <url-pattern>/*</url-pattern>

    </filter-mapping>

    <!-- spring 默認(rèn)偵聽器 -->

    <listener>

       <listener-class>

           org.springframework.web.context.ContextLoaderListener

       </listener-class>

</listener>

 

3、 配置applicationContext-security-ns.xml

 

<?xml version="1.0" encoding="UTF-8"?> 

<beans:beans xmlns="http://www.springframework.org/schema/security" 

     xmlns:beans="http://www.springframework.org/schema/beans" 

     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

     xsi:schemaLocation="http://www.springframework.org/schema/beans 

            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 

            http://www.springframework.org/schema/security 

            http://www.springframework.org/schema/security/spring-security-3.0.xsd">

 

    <!-- 設(shè)置相應(yīng)的切入點(diǎn)與filter,auto-config="false" 不使用http的自動配置  -->

    <http auto-config="false" entry-point-ref="casAuthenticationEntryPoint" access-denied-page="/common/403.jsp">

       <intercept-url pattern="/jsp/forbidden/**" access="ROLE_USER"></intercept-url>

       <intercept-url pattern="/**" filters="none"></intercept-url>

       <custom-filter position="CAS_FILTER" ref="casAuthenticationFilter" />

       <!-- custom-filter before="LOGOUT_FILTER" ref="requestSingleLogoutFilter" /> -->

       <!-- custom-filter before="CAS_FILTER" ref="singleLogoutFilter" /> -->

    </http>

   

   

    <!-- global-method-security  只能定義一個 -->

    <!-- 啟用基于安全的注解   -->

    <global-method-security secured-annotations="enabled" jsr250-annotations="enabled" >

       <protect-pointcut ="execution(* com.coin.acs.demo.bo.*Service.*(..))" access="ROLE_USER" />

       <protect-pointcut ="execution(* com.coin.acs.demo.bo.*AOP.update*(..))" access="ROLE_USER" />

    </global-method-security>

   

   

    <beans:bean id="casAuthenticationEntryPoint"

       class="org.springframework.security.cas.web.CasAuthenticationEntryPoint">

       <beans:property name="loginUrl"

           value="https://localhost:8443/cas/login" /><!-- SSO登錄地址  -->

       <beans:property name="serviceProperties" ref="serviceProperties" />

    </beans:bean>

 

    <!-- serviceProperties 為認(rèn)證成功后服務(wù)端返回的地址. 該地址將作為參數(shù)傳遞到服務(wù)端,此處不能寫為IP

       的形式。需寫為主機(jī)名(證書生成時寫的計算機(jī)全名)或域名 -->

    <beans:bean id="serviceProperties"

       class="org.springframework.security.cas.ServiceProperties">

       <beans:property name="service"

           value="http://localhost:9001/client/j_spring_cas_security_check" />

       <!-- sendRenew boolean類型 當(dāng)為true時每新打開窗口則需重新登錄 -->

       <beans:property name="sendRenew" value="false" />

    </beans:bean>

 

    <!-- 在認(rèn)證管理器中注冊cas認(rèn)證提供器 -->

    <authentication-manager alias="authenticationManager">

       <authentication-provider ref="casAuthenticationProvider" />

    </authentication-manager>

   

    <!-- cas 認(rèn)證過濾器 -->

    <beans:bean id="casAuthenticationFilter"

       class="org.springframework.security.cas.web.CasAuthenticationFilter">

       <beans:property name="authenticationManager"

           ref="authenticationManager" />

    </beans:bean>

   

 

    <!-- cas認(rèn)證提供器,定義客戶端的驗(yàn)證方式 -->

    <beans:bean id="casAuthenticationProvider"

       class="org.springframework.security.cas.authentication.CasAuthenticationProvider">

       <beans:property name="authenticationUserDetailsService" ref="authenticationUserDetailsService" /> <!-- 客戶端只驗(yàn)證用戶名是否合法 -->

       <beans:property name="serviceProperties" ref="serviceProperties" />

       <beans:property name="ticketValidator">

           <beans:bean

              class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator">

              <beans:constructor-arg index="0"

                  value="https://localhost:8443/cas" />

            </beans:bean>

       </beans:property>

       <beans:property name="key" value="cas" />

    </beans:bean>

   

       <!-- authorities對應(yīng) CAS server 登錄屬性, 在此設(shè)置到spirng security中,用于spring security的驗(yàn)證 -->

    <beans:bean id="authenticationUserDetailsService"

    class="org.springframework.security.cas.userdetails.GrantedAuthorityFromAssertionAttributesUserDetailsService">

       <beans:constructor-arg>

           <beans:array>

              <beans:value>authorities</beans:value>

           </beans:array>

       </beans:constructor-arg>

    </beans:bean>

</beans:beans>

配置完畢。

 

 

五、      參考資料

1、 Spring Security-3.0.1中文官方文檔

2、 http://metadmin.iteye.com/blog/364132  Spring Security優(yōu)劣之我見”

3、 http://dead-knight.iteye.com/blog/1520080

 

   

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
CAS 與 Spring Security 3.1整合配置詳解
SpringSecurity3整合CAS實(shí)現(xiàn)單點(diǎn)登錄
spring security 3.1配置過程從簡單到復(fù)雜詳細(xì)配置
基于注釋的Spring Security實(shí)戰(zhàn)指南
Spring Security3的使用方法有4種
CAS多點(diǎn)登陸之“非主流”配置方式
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服