版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、實戰(zhàn)Spring Security 3.x :快速構(gòu)建企業(yè)級安全羅時飛著http:/www.ope n-2010年3月25日【版權(quán)所有、侵權(quán)必究】序VII前言IX1 企業(yè)級安全概述11.1 傳統(tǒng)JavaEE安全性編程模型的局限性 .11.1.1 可移植性差 11.1.2 企業(yè)級能力差 21.1.3 不便于實施集成測試或 CI工作 31.1.4 Spring Security 成功挑戰(zhàn)Java EE安全性編程模型 31.2 揭秘 SpringSecurity 基于過濾器鏈的設(shè)計同 Web容器解耦的重要法寶 41.2.2 構(gòu)建在Spring基礎(chǔ)之上 41.2.3 Spri ng Se
2、curity 內(nèi)置的企業(yè)級特性集合 51.3 小結(jié)5.2 觸動 Spring Security 3.0 72.1 下載 SpringSecurity發(fā)布包72.2 運行及分析內(nèi)置的 SpringSecurity Tutorial Application 示例72.2.1 運行 Spring Security Tutorial Application示例 72.2.2 分析 Spring Security Tutorial Application示例 92.3 運行及分析內(nèi)置的 ContactsSampleApplication示例.102.3.1 運行 Con tacts Sample App
3、licatio n示例 102.3.2 分析 Con tacts Sample Applicatio n示例 122.4 下載持續(xù)更新的 SpringSecurity源碼132.5 小結(jié)133 Spring Security內(nèi)置的JavaEE應(yīng)用認證支持 143.1 安全性認證概述 143.1.1 安全也是矛盾的統(tǒng)一體 143.2 內(nèi)置的HTTPBASIC認證支持 153.2.1 不夠安全的HTTP BASIC認證 163.3 內(nèi)置的HTTPDigest認證支持163.3.1 安全的 HTTP Digest 認證 183.3.2 對庫中用戶密碼進行 MD5加密存儲 183.3.3 有關(guān) Dig
4、estAuthenticationEntryPoint的更多細節(jié) 193.4 內(nèi)置的HTTP表單認證支持 203.4.1 靈活控制登錄時頁面的跳轉(zhuǎn)邏輯 213.4.2 定制HTTF登錄表單的處理URL 213.5 內(nèi)置的X.509認證支持213.5.1 設(shè)置HTTP與HTTPS端口間的映射關(guān)系 243.5.2 如何從X.509證書中抽取用戶名 243.5.3 啟用單向X.509認證 253.6 小結(jié)254 分享 Spring Security認證支持背后的故事 264.1 過濾器鏈的形成264.1.1 從 springSecurityFilterChain過濾器談起 264.1.2 若干重要策
5、略接口 264.2 匿名認證264.3 Remember Me 認證服務(wù)264.4 控制并發(fā) HttpSession264.5 切換用戶274.6 自定義退出邏輯274.7 小結(jié)275 集成及管理認證信息285.1 認證提供者核心策略接口 285.2 處在內(nèi)存中的認證信息 285.3 處在關(guān)系數(shù)據(jù)庫中的認證信息 285.4 借助LDAP服務(wù)器管理認證信息285.5 基于JAAS管理認證信息 285.6 小結(jié)286 Spring Security內(nèi)置的 JavaEE應(yīng)用授權(quán)支持 296.1 授權(quán)策略296.2 針對 Web資源的授權(quán)支持 296.3 針對業(yè)務(wù)方法的授權(quán)支持296.4 小結(jié)297
6、針對領(lǐng)域?qū)ο蟮氖跈?quán)支持307.1 何謂領(lǐng)域?qū)ο?07.2 小結(jié)308 集成單點登錄及單點退出解決方案 318.1 何謂單點登錄及單點退出 318.2 Spring Security對 SSO的集成支持 318.2.1 JA-SIG CAS 318.2.2 OpenID 318.3 小結(jié)319 探索及集成JASIGCAS 329.1 JASIGCAS概述329.1.1 SAML 329.2 小結(jié)3210 探索及集成OpenID 3310.1 Ope nID 概述3310.2 小結(jié)3311 探索及集成 Kerberos/SPNEGQ 3411.1 Kerberos/SPNEGO概 述3411.2
7、小結(jié)3412 Spring Security 3.x高級專題及最佳實踐 3512.1 重新審視安全性話題3512.2 同用戶認證相關(guān)話題3512.3 同用戶授權(quán)相關(guān)話題3512.4 小結(jié)3513 附錄A: JavaEE容器內(nèi)置的JavaEE安全性支持 3613.1 ApacheTomcat6.0 內(nèi)置的 JavaEE安全性支持3613.1.1 HTTP BASIC認證 3613.1.2 HTTP Digest 認證 3713.1.3 HTTP表 單認證 3913.1.4 準備 X.509 證書 3913.1.5 雙向 X.509 認證 4413.2 EclipseJetty 7.0 內(nèi)置的 J
8、avaEE安全性支持4513.3 JBoss6.0內(nèi)置的JavaEE安全性支持 4513.4 OracleWebLogic11g 內(nèi)置的 JavaEE安全性支持4513.5 IBMWebSphere7.0 內(nèi)置的 JavaEE安全性支持4514 附錄B: Spring Security內(nèi)置的命名空間 4614.1 <http/> 命名空間.4614.2 <authentication manager/>命名空間4614.3 <global method security/>命名空間4615 附錄C:同Apache HTTPServer相關(guān)的話題 4715.1
9、 Apache HTTPServer 概述4715.1.1 配置 CA X.509 證書 4715.2 Apache HTTPServer與 CAS的整合4715.2.1 mod_auth_cas 模塊 4715.3 將 ApacheHTTPServer作為 JavaEE容器的前端4715.3.1 激活負載均衡 4716 附錄 D: Spring LDAP. 4816.1 LDAP概 述4816.1.1 LDAP服務(wù)器 4816.2 第三方LDAP客戶端工具4816.2.1 JXplorer 4816.2.2 Apache Directory Studio 4816.3 深入到 SpringL
10、DAP中4816.3.1 LdapTemplate 核心類 4816.3.2 內(nèi)置的LDAF連接池支持 4816.3.3 事務(wù)補償特性 4917 附錄E:相關(guān)資料 5017.1 圖書50網(wǎng)站50VII序序為了在軟件產(chǎn)品中啟用 Java EE容器安全性,我們往往要付出很大代價,因為Java EE容器內(nèi)置的安全性支持存在諸多重大缺點,尤其是它的可移植性、企業(yè)級能力差、難于展開各類集成測試工作等缺陷,很多企業(yè)應(yīng)用因為這些問題而轉(zhuǎn)向了Spring Security。過去的多年中,基于Spring的Spring Security博得了企業(yè)用戶的歡心。無論是在其內(nèi)部架構(gòu),還是功能方面,它都照顧到多方面的利
11、益,幾乎可以用“藝術(shù)美”形容它。從內(nèi)部架構(gòu)看,采納 Spring及基于它的架構(gòu)能夠很大程度解決企業(yè)應(yīng)用的可移植性問題。事實上,Spring Security確實是基于 Spring架構(gòu)的,同一 Spring Security使能應(yīng)用可以 部署到任意Java EE容器中。這一點在如今苛刻的企業(yè)部署環(huán)境顯得格外重要。值得注意的 是,基于Spring Security研發(fā)的企業(yè)應(yīng)用能夠順利進行各種集成測試工作,包括CI工作的開展。從功能上看,Spring Security盡可能不重復(fù)發(fā)明輪子。在很多場合,它盡量集成現(xiàn)有的、 業(yè)界領(lǐng)先的安全性解決方案,比如JA-SIG CAS、OpenID、Kerbe
12、ros。如果某些企業(yè)級特性非常重要,而又沒有現(xiàn)成的做法,則它會基于開放標準(或事實上的標準)提供它們,比如 領(lǐng)域?qū)ο笫跈?quán)。在一定場合,某些企業(yè)應(yīng)用可能需要擴展 Spring Security。它也是歡迎的,畢竟開放架 構(gòu)、開源協(xié)同工作等是開源項目最基本的行為。因此,我們沒有理由不選擇Spri ng Security去實施、加強企業(yè)應(yīng)用的安全性。自從Spring Security (Acegi)誕生的那天起,我們便開始采納它,各種軟件產(chǎn)品、企業(yè) 應(yīng)用中都有它的身影。我們希望過去積累的Spring Security經(jīng)驗、教訓(xùn)能夠積累下來,并跟進持續(xù)發(fā)展的最新版Spring Security,便萌發(fā)
13、了此書的寫作計劃。雖然本書的主題是圍繞Spring Security展開的,但我們更希望它是一本指導(dǎo)企業(yè)用戶(包括開發(fā)者)如何實施企業(yè) 級安全不可或缺的重要圖書。當(dāng)然,Spring Security涉及的知識面非常廣,加上本人經(jīng)驗有限,書中難免出現(xiàn)錯誤, 還望同行批評指正,并提出各種寶貴寫作建議。羅時飛E_mail : luoshifei2009年于廣州IX前言、八,、*刖言安全,安全,還是安全,全書都將圍繞這一重要話題展開論述。借助Spring Security ,我們能夠快速構(gòu)建企業(yè)級安全。有關(guān)Spring Security、企業(yè)級安全話題的探討,全書將一一道來。我們將各章的主體內(nèi)容安排如
14、下。第1章,企業(yè)級安全概述。主要圍繞Java EE安全性編程模型展開,并試圖將SpringSecurity帶入到開發(fā)者的視野中。第2章,觸動Spring Security 3.0。動手實踐它,并獲得感性認識。第3章,Spring Security 內(nèi)置的Java EE應(yīng)用認證支持。本章內(nèi)容將圍繞SpringSecurity 內(nèi)置的 HTTP BASIC 認證、X.509 認證、HTTP 表單認證、HTTP Digest 認 證展開論述。實際上,Java EE容器也提供了這些認證支持。第4章,分享Spring Security認證支持背后的故事。如果說第 3章內(nèi)容揭露了事實 表面的話,則本章內(nèi)容
15、給出了事實真相。另外, Spring Security還提供了大量的企 業(yè)級認證特性,比如 Remember-Me認證服務(wù)、控制并發(fā) HttpSession、切換用戶、 自定義退出邏輯等,這些內(nèi)容也將在本章得到深入細致的闡述。第5章,集成及管理認證信息。Spring Security支持將認證信息存儲到任意場合,比如RDBMS、LDAP、內(nèi)存等。第6章,Spring Security內(nèi)置的Java EE應(yīng)用授權(quán)支持。針對 Web資源、業(yè)務(wù)方法及領(lǐng)域?qū)ο蟮氖跈?quán)操作,Spring Security提供了極其優(yōu)美的集成支持,尤其是其"解 耦”行為。第7章,針對領(lǐng)域?qū)ο蟮氖跈?quán)支持。在現(xiàn)有的安
16、全性框架及解決方案中,能夠針對領(lǐng)域?qū)ο髮嵤┦跈?quán)操作的不多,但Spring Security做到了,而且非常優(yōu)雅。第8章,集成單點登錄及單點退出解決方案。第9章,探索及集成 JA-SIG CAS。第10章,探索及集成 OpenID。第11章,探索及集成 Kerberos/SPNEGO。第12章,Spring Security 3.x高級專題及最佳實踐。第13章,附錄A,Java EE容器內(nèi)置的Java EE安全性支持。第14章,附錄B, Spring Security內(nèi)置的命名空間。第15章,附錄C,同Apache HTTP Server相關(guān)的話題。第 16 章,附錄 D, Spring LDA
17、P。第17章,附錄E,相關(guān)資料。值得注意的是,http:/openv-提供了全書配套代碼、腳本的下載,借助如下SVN命令能夠?qū)⑺鼈兿螺d到D:springsource'ebooks位置。D:springsource>svn cohttp:/openv-ebooks隨后,開發(fā)者可以使用它們,或在STS中導(dǎo)入各自的代碼或腳本,并完成各自運行和調(diào)試工作。如果需要不定期更新它們,則可借助如下SVN命令。D:springsourceebooks>svn update任何問題,可以同作者取得聯(lián)系,謝謝!XII實戰(zhàn)Spring Security 3.x :快速構(gòu)建企業(yè)級安全1企業(yè)級安全概述
18、需要首先交代的是,本書主要專注于企業(yè)級Java安全的研究,尤其是 Spring Security。因此,我們的一切內(nèi)容會圍繞Java EE安全性編程模型及 Spring Security為中心。本章內(nèi)容將從揭露 Java EE安全性編程模型的缺陷出發(fā),進而將Spring Security弓I入進來。80%的企業(yè)級Java應(yīng)用都會采用Spring Security構(gòu)建自身的安全性體系。1.1傳統(tǒng)Java EE安全性編程模型的局限性在現(xiàn)有的各種安全性架構(gòu)中,Java (包括Java SE、Java ME、Java EE)平臺的安全性架構(gòu)堪稱一流,這也是Java平臺的重要賣點。然而,正如顧客購物一樣
19、,某一商品的功能多并不表示其受歡迎,因為它的易用性可能存在問題,而這一要素往往是顧客非??粗氐囊环矫妗n愃频?,Java EE平臺暴露的Java EE安全性編程模型存在的缺陷很多,而這些缺陷 是迫使開發(fā)者、企業(yè)轉(zhuǎn)向其它安全性解決方案的重要“推動力”。下面依次討論列位缺陷。1.1.1可移植性差現(xiàn)如今,無論是商用的 Java EE容器,還是開源 Java EE容器,它們已經(jīng)逐漸走向同質(zhì)化。比如,開源領(lǐng)域的Apache Tomcat、Jetty、JBoss、SpringSource dm Server 等;商用領(lǐng)域的Oracle WebLogic、IBM WebSphere (WAS )。同質(zhì)化,意味
20、著客戶 (即部署Java EE 應(yīng)用的企業(yè))將不再去過多計較自身的生產(chǎn)系統(tǒng)采納何種Java EE容器,他們會把更多精力放在如何提升各自企業(yè)應(yīng)用本身上。與此同時,只要是企業(yè)應(yīng)用,它們便存在各自的安全性體系架構(gòu)。架構(gòu)師、開發(fā)者(包括軟件企業(yè))需要保證打造的企業(yè)應(yīng)用能夠同時宿主到各種Java EE容器中。問題來了,如果采納傳統(tǒng)的Java EE安全性編程模型,則開發(fā)者不僅要去調(diào)整Java EE容器本身的各種安全性配置,而且他們還可能需要調(diào)整自身的企業(yè)應(yīng)用。下面舉例說明。當(dāng)開發(fā)者啟用Apache Tomcat內(nèi)置的HTTP BASIC認證支持時,如果簡單地將用 戶及角色等信息直接存儲到文件中,則需要手工
21、修改位于Tomcat conf目錄中的tomcat-users.xml配置文件。將來,部署在Tomcat中的企業(yè)應(yīng)用便能夠享受到HTTP BASIC認證所帶來的安全性支持了。但如果企業(yè)決定要替換原有的Web容 器時,比如將Tomcat換成IBM WAS。此時,開發(fā)者又要去了解 WAS是如何存 儲用戶及角色等信息的。在集成業(yè)界各種著名第三方安全性解決方案方面,各Java EE容器都有各自的做法,比如 JA-SIG CAS、OpenID、Kerberos/SPNEGO 。借助 Java EE 安全性編程模型較難同它們打交道, 最終開發(fā)者很難真正將它們納入到企業(yè)應(yīng)用的研發(fā)工作中。即使能夠采納它們,應(yīng)
22、用的可移植性也將是一個問題。等等,開發(fā)者可以想出其它類似場景。從上述示例能夠看出,在采納傳統(tǒng)Java EE 編程模型研發(fā)企業(yè)應(yīng)用時,開發(fā)者往往需要調(diào)整宿主企業(yè)應(yīng)用的Java EE容器中的相關(guān)配置文件, 部署環(huán)節(jié)將變得異常復(fù)雜。 這說明,企業(yè)應(yīng)用同Java EE容器耦合在一起,即借助Java EE安全性編程模型研發(fā)的企業(yè)應(yīng)用可移 植性差。當(dāng)企業(yè)應(yīng)用的可移植性差時,我們便不能夠敏捷地響應(yīng)客戶、市場變化。1.1.2企業(yè)級能力差Java EE容器(包括Java SE平臺)內(nèi)置的企業(yè)級特性不少,但要將它們應(yīng)用到真實的企業(yè)應(yīng)用中,還存在一段距離。具體表現(xiàn)舉例如下。在某些場合,即使是同一企業(yè)應(yīng)用,它可能需要
23、同時啟用多種不同的認證策略。比如,A類用戶(遠程桌面用戶)需要通過HTTP BASIC 認證,而B類用戶(瀏覽器用戶)需要通過HTTP表單認證。如果采納傳統(tǒng)Java EE安全性編程模型,則這 幾乎是比"007”還難完成的任務(wù)。如何修改同一web.xml能夠達到這一目標呢?懸!心、.在Java EE安全性編程模型中,開發(fā)者很難看到,匿名認證、Remember-Me認證服務(wù)、控制并發(fā) HttpSession、自定義退出邏輯等企業(yè)級特性。大量的研發(fā)及企業(yè)生產(chǎn)告訴我們,這些企業(yè)級特性是非常實用、基礎(chǔ)的。然而,Java EE安全性編程模型卻沒有提供。等等,開發(fā)者可以想出其它類似場景。因此,能夠
24、看出,Java EE安全性編程模型暴露的企業(yè)級能力差,不貼近真實的生產(chǎn)。各生產(chǎn)環(huán)境存在太多的差異性、不確定性,這些問題不應(yīng)該直接暴露給開發(fā)者。3實戰(zhàn)Spring Security 3.x :快速構(gòu)建企業(yè)級安全1.1.3不便于實施集成測試或CI工作一直以來,這是 Java EE安全性編程模型暴露的重要缺陷?,F(xiàn)如今,不進行各類軟件測試工作的軟件團隊是極不負責(zé)任的。具體表現(xiàn)在如下幾方面。研發(fā)企業(yè)應(yīng)用期間,開發(fā)者較難編寫出脫離 Java EE容器的集成測試代碼。這主要是因為Java EE應(yīng)用同Java EE容器耦合在一起。此時,即使開發(fā)者能夠編寫出基 于JUnit/TestNG 的集成測試代碼,則必須
25、同時啟動Java EE容器,并將這些測試代碼部署到容器中才能夠見識到這些測試代碼的效果。不夠敏捷的又一體現(xiàn)。為搭建功能或性能測試環(huán)境, 部署或測試人員需要修改 Java EE容器中的不少配置 文件,以滿足Java EE安全性編程模型的要求。 試想,如果找到任一 Java EE容器, 直接將企業(yè)應(yīng)用部署到其中, 則整個企業(yè)應(yīng)用的安全性體系即可生效,則這是最好不過的事情。努力尋找這類安全性體系中 因為上述原因,廣為業(yè)界使用的持續(xù)集成(Continuous Integration, CI)設(shè)施無法派上用場,或者說不能夠最大化CI的價值。幾乎可以認為,如果企業(yè)應(yīng)用的各類集成測試工作不能夠順利進行,尤其
26、是被CI自動完成,則研發(fā)效率、軟件如何交付能力將大打折扣,后果很嚴重。最終,大量的人力、物力 資源遭到浪費,進而影響到團隊斗志。1.1.4 Spring Security成功挑戰(zhàn)Java EE安全性編程模型從2006年開始,Spring Security (Acegi )成為了企業(yè)級 Java安全性領(lǐng)域的一片旗幟。借助Spring Security構(gòu)建企業(yè)應(yīng)用的安全性體系期間,我們能夠享受到如下優(yōu)勢。應(yīng)用的可移植性非常好,所有同安全性相關(guān)的內(nèi)容都將內(nèi)置在應(yīng)用本身,比如WAR包中。部署這類應(yīng)用期間,不用去修改目標Java EE容器中同安全性相關(guān)的任何配置文件。企業(yè)級能力很強,因為 Spring
27、Security 源自實踐。作為一開源框架,或者說安全 性平臺,其發(fā)展速度是傳統(tǒng) Java EE安全性編程模型無法比擬的。比如,在集成第 三方安全性解決方案時、提供各種新的企業(yè)級安全性特性時。由于Spring Security 構(gòu)建在Spring基礎(chǔ)上,這使得各類集成測試及CI工作能夠上述優(yōu)勢集合說明,Spring Security 優(yōu)雅地解決了傳統(tǒng) Java EE安全性編程模型存在的 各種致命缺陷。1.2 揭秘 Spring Security開發(fā)者可能會問,Spring Security是如何克服傳統(tǒng) Java EE安全性編程模型內(nèi)置的缺陷 集合呢?下面一一揭露相關(guān)內(nèi)容。 至于具體的使用和實
28、現(xiàn)細節(jié),則需要在日后的實踐和閱讀 工作中體現(xiàn)。1.2.1基于過濾器鏈的設(shè)計同Web容器解耦的重要法寶在傳統(tǒng)Java EE安全性編程模型中,開發(fā)者需要在 web.xml中表達HTTP安全性需求。 如果安全性需求非常復(fù)雜,而且靈活多變,尤其是要外在化管理它們時,比如借助MySQL數(shù)據(jù)庫動態(tài)管理安全性體系,則 web.xml顯然是不能夠滿足此類場景的??紤]到真實企業(yè)環(huán)境的多樣化,Spring Security借助過濾器鏈(javax.servlet.FilterChain )描述和承載HTTP安全性需求。過濾器鏈是標準Java EE行為,它由若干過濾器構(gòu)成。不同過濾器可實現(xiàn)不同HTTP訪問控制目的,
29、比如判斷HttpSession是否已經(jīng)創(chuàng)建、當(dāng)前用戶是否已創(chuàng)建了其它 HttpSession等??梢灶A(yù)見,借助過濾器鏈,開發(fā)者可以實現(xiàn)復(fù)雜HTTP安全性需求。開發(fā)者可能會問, 過濾器需要配置在 web.xml中,如果需要調(diào)整 HTTP訪問控制,則也 需要不斷調(diào)整 web.xml。下節(jié)內(nèi)容能夠打消您的這種擔(dān)憂, 因為Spring Security構(gòu)建在Spring 基礎(chǔ)上,過濾器鏈可以配置在 Spring DI容器中,而且這是 Spring Security的默認行為。1.2.2構(gòu)建在Spring基礎(chǔ)之上Spring 3.0平臺在引領(lǐng) Java EE的未來,Spring Security承載在這
30、一平臺上面。上述過濾 器鏈中各過濾器的配置可以由Spring完成,比如借助 org.springframework.web.filter包中的DelegatingFilterProxy過濾器代理類能夠?qū)崿F(xiàn)這一目的。事實上,Spring Security不僅能夠保護 HTTP資源(Web資源),業(yè)務(wù)方法和領(lǐng)域?qū)ο?都是它能夠保護的內(nèi)容。為了保證最小的入侵性,Spring Security啟用了 Spring AOP技術(shù)實現(xiàn)對業(yè)務(wù)方法、領(lǐng)域?qū)ο蟮谋Wo。與此同時,Spring針對代碼級的集成測試工作提供了一完整的解決方案,這為SpringSecurity順利實施集成測試工作奠定了良好的基礎(chǔ)。1.2.
31、3 Spring Security內(nèi)置的企業(yè)級特性集合Spring Security內(nèi)置了大量企業(yè)級特性,它們或者同Java EE容器內(nèi)置的安全性支持進行了很好的融合,或者同第三方安全性解決方案進行了很好的整合工作,或者是自身開發(fā)的專有特性,或者留出了不少擴展接口供開發(fā)者實現(xiàn)新的企業(yè)級特性。這些企業(yè)級特性目的只有一個,即改善企業(yè)應(yīng)用的安全性、提升研發(fā)效率。下面一一列舉出它們,排名不分先后。內(nèi)置了各種 HTTP認證支持,其中包括 HTTP BASIC、HTTP Digest、HTTP表單認 證、HTTP SSL( X.509 )認證。針對Web資源、業(yè)務(wù)方法、領(lǐng)域?qū)ο筇峁┝艘徽渍J證和授權(quán)解決方
32、案。Spring Security能夠融入到任何類型的企業(yè)應(yīng)用中,無論目標應(yīng)用是否采用SpringWeb Flow,還是 Spring BalzeDS Integration ,還是 Spring Web Services,還是 Spring Batch,還是普通非Spring桌面應(yīng)用等。提供了許多JSP標簽庫,以完成各種認證及授權(quán)操作。集成了多種第三方 SSO解決方案,比如 JA-SIG CAS、OpenID、Kerberos/SPNEGO 等。支持 RDBMS、LDAP、XML、.properties 等認證源。兼容于Java EE安全性編程模型,并能夠在同一Java EE應(yīng)用中同時啟用
33、SpringSecurity和Java EE安全性編程模型。提供了大量的實用企業(yè)級特性,比如匿名認證、Remember-Me認證服務(wù)、控制并發(fā)HttpSession、自定義退出邏輯、Run-As認證服務(wù)等。支持用戶在 HTTP和HTTPS傳輸渠道間動態(tài)切換。Spri ng Security 的任意組成部分都可以被替換、擴展。1.3小結(jié)Java EE (包括Java SE)平臺內(nèi)置的安全特性集合非常豐富,然而它們暴露給開發(fā)者、 企業(yè)的客戶視圖,即安全性編程模型存在諸多缺陷,其中以可移植性差、企業(yè)級能力差、難并依此揭開了研究于開展各種集成測試工作為代表。本章圍繞這些內(nèi)容進行了全方位闡述,Sprin
34、g Security 的序幕。下章內(nèi)容將正式進入到Spring Security實踐中。7實戰(zhàn)Spring Security 3.x :快速構(gòu)建企業(yè)級安全8實戰(zhàn)Spring Security 3.x :快速構(gòu)建企業(yè)級安全2 觸動 Spring Security 3.0本章將圍繞Spring Security發(fā)布包內(nèi)置的兩個 Demo展開論述,開發(fā)者將從它們身上獲得對Spring Security的感性認識。這里暫時不會去探討它們的技術(shù)細節(jié),本書后續(xù)內(nèi)容負責(zé)深入討論它們。由于這兩個Demo內(nèi)置在Spring Security發(fā)布包中,我們還是從下載SpringSecurity發(fā)布包開始吧!2.1
35、 下載 Spring Security 發(fā)布包 ,這是下載 Spring Security 發(fā)布包的入口。圖2-1展示了操作示例。Spring Community Downloadsa Spring Frameworko Spring Security匚 Latest GA release' 3 0 2 RELEASEspring-security-3.0.2.尺ELEA3E.zip (shad 17.4 MB>- More »圖 2-1 下載 Spring Security比如,一旦下載spring-security-3.02RELEASE.zip 后,便可完成它的解
36、壓工作。其中內(nèi)置了對應(yīng)的 Jar包集合、源碼、兩個Demo、文檔(包括Javadoc和Referenee Documentation )。F面來依次研究這兩個 Demo。2.2 運行及分析內(nèi)置的 Spring Security Tutorial Application 示 例先來研究 spring-security-samples-tutorial-3.02RELEASE.war 示例應(yīng)用。2.2.1 運行 Spring Security Tutorial Application 示例直接將 sprin g-security-samples-tutorial-3.0.2.RELEASE.war
37、 拷貝到 Apache Tomcat 的webapps 目錄中,即完成 Spring Security Tutorial Application示例應(yīng)用的部署。啟動Tomcat后,將瀏覽器定位到對應(yīng)的URL中,開發(fā)者便可看到應(yīng)用的主頁,圖2-2展示了它。圖 2-2 Spring Security Tutorial Application 示例應(yīng)用的主頁單擊"Secure page”或"Extremely secure page”頁面時,應(yīng)用會彈出 HTTP登錄表單,具體見圖2-3所示。圖2-3 HTTP 登錄表單這一示例應(yīng)用內(nèi)置了rod/koala、dianne/emu、s
38、cott/wombat、peter/opal 等用戶。它們都 具有“ ROLE_USER ”角色,rod和dianne用戶還具有“ ROLE_TELLER ”角色,而rod甚 至還具有“ ROLE_SUPERVISOR ”角色。圖2-4展示了 peter用戶登錄到應(yīng)用中。Secure PageThis Is 方 由亡todl 風(fēng)總也 T&U 吐出 ge>t to me If vt be旳.r沁吐吐存也 址 ifauih«titleat4d thisPropcrt i*?®irteid us Itlk 電尋畧g :直ijth螳i 右乜 I i 口n /他Tj*E
39、V-alijc:|<ecc ! -su: henti c-atii kl prcpertyCpeter<sec; amhantl cati mi pf opert尸'話h usmian*, />peter: outhpnti c«ti hi prQperty=" priiiKipuL meblcd* t><sec ! 3U? henti cat ii oa prcpErty-" priiiiipal. aFicaLcitKanLocke-d10 trueHoneLa.口ul圖2-4 peter用戶登錄到應(yīng)用中注意,只有rod用
40、戶才能訪問到“ Extremely secure page”頁面,因為這一頁面要求登錄用戶具有“ ROLE_SUPERVISOR ”角色。如果其它用戶試圖訪問它,貝UHTTP 403拒絕訪問錯誤會打印出來,見圖2-5。£ Apaehe Tomcat/&Q-殳6 - Error report - Windows inlerrtel Exploref: iDCQlhOSt: 3之舛1日塢軻(£】豆雜世I收聲夾魚I工具柏 RtotHj阪藏.夾兇.Apache Tomcai/6.0.26 - ErorreiporlHTTP Status 403 - Access is de
41、niedlJJsE Status reportSB Access agpm匸hgdigsouiTE fdttEES 氐 CEn杞cE heis衍|口止電仃Rpachej omBt/ H 應(yīng)巨石圖 2-5 peter 用戶試圖訪問"Extremely secure page"頁面當(dāng)用戶訪問到listAccounts.html頁面(圖2-6)后,如果希望進行各項業(yè)務(wù)操作,則應(yīng)用也會彈出 HTTP登錄表單出來。持有 ROLE_SUPERVISOR或ROLE_TELLER 角色的用戶才能夠進行這些業(yè)務(wù)操作,即rod和dianne用戶。丈啊日卸劉巳醤花世)收歲頭再工具屯_罵助凹 冷收
42、祕 區(qū) http:occlhost:8D80/ipfing-security.AccountsHomeID Hui tier Baliuictr OvETclraf I Op er at i cm 呂1rod0.0100. 0-E20 -$5 +$5 +t202diaruic0.010(). I)-J20 -$5 +15 l$203scott0.0100. 07f20 全 4J5 +化?JpelerQ.O100, D-$20 -$5 +|5 +)20L 旳ut圖 2-6 listAccounts.html 頁面通過單擊"Logout ”超鏈接,當(dāng)前用戶將結(jié)束當(dāng)前HttpSession
43、的生命周期。更多使用細節(jié),讀者可以操作體驗一下。2.2.2 分析 Spring Security Tutorial Application 示例這一應(yīng)用借助 Spring Web MVC 實現(xiàn)展現(xiàn)層,安全性管理工作交給了Spring Security 。從上節(jié)能夠了解到,這一示例應(yīng)用同時啟用了Spring Security內(nèi)置的Web資源和業(yè)務(wù)方法的安全性支持,即認證和授權(quán)功能。比如,/secure/index.jsp、/secure/extreme/index.jsp便是Web資源,它們是面向 HTTP用戶的。透過位于 WEB-INF中的applicationContext-security
44、.xml 配置文件能夠看到,它持有如下內(nèi)容。<intercept-url/>元素能夠控制用戶對Web資源的訪問操作,這里使用到Spring EL表達式語言。<intercept-url pattern="/secure/extreme/*" access="hasRole('ROLE_SUPERVISOR"/><intercept-url pattern="/secure/*" access="isAuthenticated()"/><intercept-url p
45、attern="/*" access="permitAll"/>大家是否注意到,listAccounts.html頁面允許匿名用戶(未認證用戶)訪問,但一旦他 們打算操作相應(yīng)的業(yè)務(wù)操作時,HTTP登錄表單便會出現(xiàn)。如果分析應(yīng)用的源代碼,讀者會發(fā)現(xiàn),bigbank.BankService接口的post()方法簽名如下,在listAccounts.html頁面進行業(yè)務(wù)操 作時會調(diào)用到這一業(yè)務(wù)方法。PreAuthorize是Spring Security內(nèi)置的、用于保護業(yè)務(wù)方法的重要注解。PreAuthorize ("hasRole('
46、 ROLE_SUPERVISOR or " +"hasRole(' ROLE_TELLER) and 併 account.balance + #amount >= -#account.overdraft)") public Account post(Account account, double amount);更多Spring Security使用細節(jié),我們將在后續(xù)內(nèi)容中一一闡述。2.3運行及分析內(nèi)置的 Con tacts Sample Applicatio n 示例再來研究 spring-security-samples-contacts-3.0
47、.2.RELEASE.war 示例應(yīng)用。2.3.1 運行 Con tacts Sample Application 示例直接將 spring-security-samples-contacts-3.0.2.RELEASE.war 拷貝到 Apache Tomcat 的web apps目錄中,即完成 Con tacts Sample Applicatio n示例應(yīng)用的部署。啟動Tomcat后,將瀏覽器定位到對應(yīng)的URL中,開發(fā)者便可看到應(yīng)用的主頁,圖2-7展示了它。圖 2-7 Contacts Sample Application 示例應(yīng)用的主頁當(dāng)單擊“ Manager”或“ Debug”超鏈接
48、時,瀏覽器會將用戶帶到登錄頁面,圖2-8所示。圖 2-8 登錄 Contacts Sample Application圖2-9展示了 rod用戶登錄到debug.jsp頁面的情形,這一頁面展示了當(dāng)前登錄用戶的相 關(guān)信息,比如持有的角色集合等。圖 2-9 /secure/debug.jsp 頁面圖2-10展示了 bill用戶訪問/secure/index.htm頁面的情形。M34 J km* Rhlctt 罕 Bob JrhxnanLinZii triML 2(. Jtre E=Ti«|a3-23 ttliadm Ln*24 BAaada Ha讓an s 曰mh el » P
49、UL£p Btikl35 JkFF IcAIf-iujhiL J Lp*bcwi. raa iraFfllK蟲pine, ub:MllaMjstvum. can I nUfeciHn- cat JtnHkK I iunrl:. e leLinsLant.m l«LL ndml m ce:L Adiirj Frztximjw ?d Fnvaaaaf You ConhacH -rrlarrwr 1 yMaw.101 Xl上J"理KiJP土七F:止IE «!.- 吐佇1創(chuàng) ±Air 吧戸 嘖 HA |j i>Xbill* s Contacts1
50、5實戰(zhàn)Spring Security 3.x :快速構(gòu)建企業(yè)級安全盟Cma=hi«3 "I士.自3i Liaa V1L31m42 4=i世 UE*HIfTMC-U! Ifl5 JM Sh« Fh£Lip H4a <r 呻 cmiLaadhfilLi as- ihh 曲osiJMl迫L說di 訊 fftkf 運 E.4»jhiLJ L|#iTinirihh liA JenLVthiL gIcL A-iuri Ffebjuijwi $LF ezul .j'.ML Mfciri FcEauBijOB:tI hvi- I#實戰(zhàn)Spring
51、 Security 3.x :快速構(gòu)建企業(yè)級安全#實戰(zhàn)Spring Security 3.x :快速構(gòu)建企業(yè)級安全1用.11膽 (! u clwirian£«3 n 'tBDfcLr)#實戰(zhàn)Spring Security 3.x :快速構(gòu)建企業(yè)級安全#實戰(zhàn)Spring Security 3.x :快速構(gòu)建企業(yè)級安全圖 2-10 /secure/index.htm 頁面2.3.2 分析 Con tacts Sample Application 示例Spring Web MVC用來實現(xiàn)這一 Web示例的展現(xiàn)層,與此同時, Spring Security接管了 相應(yīng)的安全
52、性控制。 同Spring Security Tutorial Application 示例應(yīng)用相比,這一 Demo的如下 幾方面同它存在重大差異。其一,Contacts Sample Application示例啟用了 Spring Security內(nèi)置的領(lǐng)域?qū)ο蟀踩灾?持,applicati onCon text-com mon-authorizati on. xml酉己置文件證實了這一點,本書后續(xù)章節(jié)會深入闡述到它。針對領(lǐng)域?qū)ο筇峁┌踩灾С郑@是一項重要的企業(yè)級特性。其二,將認證信息存儲到HSQLDB 數(shù)據(jù)庫中,applicationContext-common-business.xml
53、配置文件說明這一切, 其定義的“ dataSource"受管Bean定義了數(shù)據(jù)源,而DataSourcePopulator 實用類初始化了這一數(shù)據(jù)庫,它同時持有業(yè)務(wù)資料庫。其三,Con tacts Sample Applicati on 示例的登錄表單是由應(yīng)用自身提供的,即logi n.jsp。在 Spring Security Tutorial Application 示例中,HTTP 登錄表單是由 Spring Security 提供的, 下面摘錄了 即plicationContext-security.xml配置文件中的相關(guān)片段。vform-login login-page=&
54、quot;/login.jsp"authentication-failure-url="/login.jsp?login_error=1"/>如果開發(fā)者屏蔽掉這段配置,則同樣可以使用這一示例。此時,登錄憑證的收集工作將 改成HTTP BASIC認證,而不再是 HTTP表單認證。圖2-11展示了 HTTP BASIC認證的使用。圖2-11 啟用HTTP BASIC 認證更多Spring Security使用細節(jié),我們將在后續(xù)內(nèi)容中一一闡述。2.4下載持續(xù)更新的Spring Security源碼目前,Spring Security項目存儲在 Git配置庫中。借助
55、如下Git命令行,能夠獲得最新的項目源碼。git clone git://spring-security/spring-security.git這里面存在Spring Security發(fā)布包沒有包括的內(nèi)容,尤其是有很多Demo,供開發(fā)者學(xué)習(xí)、參考。2.5小結(jié)Spring Security建立了感性認識。從下章開始,我們將系統(tǒng)性透過本章內(nèi)容,開發(fā)者對研究 Spring Security。3 Spring Security內(nèi)置的Java EE應(yīng)用認證支持收集登錄用戶的憑證策略多種多樣,比如HTTP表單、BASIC認證、X.509 CA證書、HTTP Dige
56、st,甚至包括 SSO等策略。本章將專注 4種常見的Java EE應(yīng)用認證機制。3.1安全性認證概述假設(shè)一下:使用網(wǎng)銀系統(tǒng)不用用戶帳號、進出候機大廳不用安檢。這些都是很危險的行為。很顯然,加強安全性管理顯得格外重要。因此,類似地,企業(yè)級系統(tǒng)都應(yīng)該要求用戶登 錄(認證),至于登錄的方式或策略,則需要依據(jù)實際情況操作。對于企業(yè)級Java應(yīng)用而言,Java EE規(guī)范規(guī)定了若干種認證策略,比如HTTP表單、BASIC認證、X.509 CA證書、HTTP Digest。各Java EE容器必須內(nèi)置這些認證支持。與此同時,Spring Security也內(nèi)置了這些認證支持。開發(fā)者可能會問,既然 Java EE容器必須內(nèi)置這些認證機制,Spring Security為什么要重復(fù)發(fā)明輪子。原因很簡單,如果企業(yè)應(yīng)用采用Java EE容器內(nèi)置的安全性支持,則應(yīng)用的可移植性和靈活性將很差,相反,Spring Security使能應(yīng)用的可移植性和靈活性能夠得到保證。還記得我們在第2章演示的那兩個 Demo吧,我們在部署它們期間,幾乎沒有修改Apache Tomcat的任何內(nèi)容。有關(guān)Java EE容器內(nèi)置
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度青海省公共營養(yǎng)師之二級營養(yǎng)師提升訓(xùn)練試卷A卷附答案
- 2025年度智能照明產(chǎn)品銷售與回購服務(wù)合同范本3篇
- 實驗室生物安全教育與培訓(xùn)要點
- 二零二五年度美團騎手權(quán)益保障服務(wù)合同3篇
- 二零二四年度漁船購置與漁業(yè)法律法規(guī)咨詢合同3篇
- 2025年度美容院美容儀器智能控制系統(tǒng)研發(fā)合同2篇
- 二零二五年度門衛(wèi)服務(wù)智能化升級改造合同4篇
- 2025年度個人房地產(chǎn)開發(fā)商融資合同4篇
- 2025年度個人對文化創(chuàng)意企業(yè)借款合同范本4篇
- 自我管理技巧在商業(yè)競爭中的應(yīng)用
- 2024年供應(yīng)鏈安全培訓(xùn):深入剖析與應(yīng)用
- 飛鼠養(yǎng)殖技術(shù)指導(dǎo)
- 壞死性筋膜炎
- 整式的加減單元測試題6套
- 股權(quán)架構(gòu)完整
- 山東省泰安市2022年初中學(xué)業(yè)水平考試生物試題
- 注塑部質(zhì)量控制標準全套
- 人教A版高中數(shù)學(xué)選擇性必修第一冊第二章直線和圓的方程-經(jīng)典例題及配套練習(xí)題含答案解析
- 銀行網(wǎng)點服務(wù)禮儀標準培訓(xùn)課件
- 二年級下冊數(shù)學(xué)教案 -《數(shù)一數(shù)(二)》 北師大版
- 晶體三極管資料
評論
0/150
提交評論