




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實戰Spring Security 3.x :快速構建企業級安全羅時飛著http:/www.ope n-2010年3月25日【版權所有、侵權必究】序VII前言IX1 企業級安全概述11.1 傳統JavaEE安全性編程模型的局限性 .11.1.1 可移植性差 11.1.2 企業級能力差 21.1.3 不便于實施集成測試或 CI工作 31.1.4 Spring Security 成功挑戰Java EE安全性編程模型 31.2 揭秘 SpringSecurity 基于過濾器鏈的設計同 Web容器解耦的重要法寶 41.2.2 構建在Spring基礎之上 41.2.3 Spri ng Se
2、curity 內置的企業級特性集合 51.3 小結5.2 觸動 Spring Security 3.0 72.1 下載 SpringSecurity發布包72.2 運行及分析內置的 SpringSecurity Tutorial Application 示例72.2.1 運行 Spring Security Tutorial Application示例 72.2.2 分析 Spring Security Tutorial Application示例 92.3 運行及分析內置的 ContactsSampleApplication示例.102.3.1 運行 Con tacts Sample App
3、licatio n示例 102.3.2 分析 Con tacts Sample Applicatio n示例 122.4 下載持續更新的 SpringSecurity源碼132.5 小結133 Spring Security內置的JavaEE應用認證支持 143.1 安全性認證概述 143.1.1 安全也是矛盾的統一體 143.2 內置的HTTPBASIC認證支持 153.2.1 不夠安全的HTTP BASIC認證 163.3 內置的HTTPDigest認證支持163.3.1 安全的 HTTP Digest 認證 183.3.2 對庫中用戶密碼進行 MD5加密存儲 183.3.3 有關 Dig
4、estAuthenticationEntryPoint的更多細節 193.4 內置的HTTP表單認證支持 203.4.1 靈活控制登錄時頁面的跳轉邏輯 213.4.2 定制HTTF登錄表單的處理URL 213.5 內置的X.509認證支持213.5.1 設置HTTP與HTTPS端口間的映射關系 243.5.2 如何從X.509證書中抽取用戶名 243.5.3 啟用單向X.509認證 253.6 小結254 分享 Spring Security認證支持背后的故事 264.1 過濾器鏈的形成264.1.1 從 springSecurityFilterChain過濾器談起 264.1.2 若干重要策
5、略接口 264.2 匿名認證264.3 Remember Me 認證服務264.4 控制并發 HttpSession264.5 切換用戶274.6 自定義退出邏輯274.7 小結275 集成及管理認證信息285.1 認證提供者核心策略接口 285.2 處在內存中的認證信息 285.3 處在關系數據庫中的認證信息 285.4 借助LDAP服務器管理認證信息285.5 基于JAAS管理認證信息 285.6 小結286 Spring Security內置的 JavaEE應用授權支持 296.1 授權策略296.2 針對 Web資源的授權支持 296.3 針對業務方法的授權支持296.4 小結297
6、針對領域對象的授權支持307.1 何謂領域對象307.2 小結308 集成單點登錄及單點退出解決方案 318.1 何謂單點登錄及單點退出 318.2 Spring Security對 SSO的集成支持 318.2.1 JA-SIG CAS 318.2.2 OpenID 318.3 小結319 探索及集成JASIGCAS 329.1 JASIGCAS概述329.1.1 SAML 329.2 小結3210 探索及集成OpenID 3310.1 Ope nID 概述3310.2 小結3311 探索及集成 Kerberos/SPNEGQ 3411.1 Kerberos/SPNEGO概 述3411.2
7、小結3412 Spring Security 3.x高級專題及最佳實踐 3512.1 重新審視安全性話題3512.2 同用戶認證相關話題3512.3 同用戶授權相關話題3512.4 小結3513 附錄A: JavaEE容器內置的JavaEE安全性支持 3613.1 ApacheTomcat6.0 內置的 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 內置的 J
8、avaEE安全性支持4513.3 JBoss6.0內置的JavaEE安全性支持 4513.4 OracleWebLogic11g 內置的 JavaEE安全性支持4513.5 IBMWebSphere7.0 內置的 JavaEE安全性支持4514 附錄B: Spring Security內置的命名空間 4614.1 <http/> 命名空間.4614.2 <authentication manager/>命名空間4614.3 <global method security/>命名空間4615 附錄C:同Apache HTTPServer相關的話題 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服務器 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 內置的LDAF連接池支持 4816.3.3 事務補償特性 4917 附錄E:相關資料 5017.1 圖書50網站50VII序序為了在軟件產品中啟用 Java EE容器安全性,我們往往要付出很大代價,因為Java EE容器內置的安全性支持存在諸多重大缺點,尤其是它的可移植性、企業級能力差、難于展開各類集成測試工作等缺陷,很多企業應用因為這些問題而轉向了Spring Security。過去的多年中,基于Spring的Spring Security博得了企業用戶的歡心。無論是在其內部架構,還是功能方面,它都照顧到多方面的利
11、益,幾乎可以用“藝術美”形容它。從內部架構看,采納 Spring及基于它的架構能夠很大程度解決企業應用的可移植性問題。事實上,Spring Security確實是基于 Spring架構的,同一 Spring Security使能應用可以 部署到任意Java EE容器中。這一點在如今苛刻的企業部署環境顯得格外重要。值得注意的 是,基于Spring Security研發的企業應用能夠順利進行各種集成測試工作,包括CI工作的開展。從功能上看,Spring Security盡可能不重復發明輪子。在很多場合,它盡量集成現有的、 業界領先的安全性解決方案,比如JA-SIG CAS、OpenID、Kerbe
12、ros。如果某些企業級特性非常重要,而又沒有現成的做法,則它會基于開放標準(或事實上的標準)提供它們,比如 領域對象授權。在一定場合,某些企業應用可能需要擴展 Spring Security。它也是歡迎的,畢竟開放架 構、開源協同工作等是開源項目最基本的行為。因此,我們沒有理由不選擇Spri ng Security去實施、加強企業應用的安全性。自從Spring Security (Acegi)誕生的那天起,我們便開始采納它,各種軟件產品、企業 應用中都有它的身影。我們希望過去積累的Spring Security經驗、教訓能夠積累下來,并跟進持續發展的最新版Spring Security,便萌發
13、了此書的寫作計劃。雖然本書的主題是圍繞Spring Security展開的,但我們更希望它是一本指導企業用戶(包括開發者)如何實施企業 級安全不可或缺的重要圖書。當然,Spring Security涉及的知識面非常廣,加上本人經驗有限,書中難免出現錯誤, 還望同行批評指正,并提出各種寶貴寫作建議。羅時飛E_mail : luoshifei2009年于廣州IX前言、八,、*刖言安全,安全,還是安全,全書都將圍繞這一重要話題展開論述。借助Spring Security ,我們能夠快速構建企業級安全。有關Spring Security、企業級安全話題的探討,全書將一一道來。我們將各章的主體內容安排如
14、下。第1章,企業級安全概述。主要圍繞Java EE安全性編程模型展開,并試圖將SpringSecurity帶入到開發者的視野中。第2章,觸動Spring Security 3.0。動手實踐它,并獲得感性認識。第3章,Spring Security 內置的Java EE應用認證支持。本章內容將圍繞SpringSecurity 內置的 HTTP BASIC 認證、X.509 認證、HTTP 表單認證、HTTP Digest 認 證展開論述。實際上,Java EE容器也提供了這些認證支持。第4章,分享Spring Security認證支持背后的故事。如果說第 3章內容揭露了事實 表面的話,則本章內容
15、給出了事實真相。另外, Spring Security還提供了大量的企 業級認證特性,比如 Remember-Me認證服務、控制并發 HttpSession、切換用戶、 自定義退出邏輯等,這些內容也將在本章得到深入細致的闡述。第5章,集成及管理認證信息。Spring Security支持將認證信息存儲到任意場合,比如RDBMS、LDAP、內存等。第6章,Spring Security內置的Java EE應用授權支持。針對 Web資源、業務方法及領域對象的授權操作,Spring Security提供了極其優美的集成支持,尤其是其"解 耦”行為。第7章,針對領域對象的授權支持。在現有的安
16、全性框架及解決方案中,能夠針對領域對象實施授權操作的不多,但Spring Security做到了,而且非常優雅。第8章,集成單點登錄及單點退出解決方案。第9章,探索及集成 JA-SIG CAS。第10章,探索及集成 OpenID。第11章,探索及集成 Kerberos/SPNEGO。第12章,Spring Security 3.x高級專題及最佳實踐。第13章,附錄A,Java EE容器內置的Java EE安全性支持。第14章,附錄B, Spring Security內置的命名空間。第15章,附錄C,同Apache HTTP Server相關的話題。第 16 章,附錄 D, Spring LDA
17、P。第17章,附錄E,相關資料。值得注意的是,http:/openv-提供了全書配套代碼、腳本的下載,借助如下SVN命令能夠將它們下載到D:springsource'ebooks位置。D:springsource>svn cohttp:/openv-ebooks隨后,開發者可以使用它們,或在STS中導入各自的代碼或腳本,并完成各自運行和調試工作。如果需要不定期更新它們,則可借助如下SVN命令。D:springsourceebooks>svn update任何問題,可以同作者取得聯系,謝謝!XII實戰Spring Security 3.x :快速構建企業級安全1企業級安全概述
18、需要首先交代的是,本書主要專注于企業級Java安全的研究,尤其是 Spring Security。因此,我們的一切內容會圍繞Java EE安全性編程模型及 Spring Security為中心。本章內容將從揭露 Java EE安全性編程模型的缺陷出發,進而將Spring Security弓I入進來。80%的企業級Java應用都會采用Spring Security構建自身的安全性體系。1.1傳統Java EE安全性編程模型的局限性在現有的各種安全性架構中,Java (包括Java SE、Java ME、Java EE)平臺的安全性架構堪稱一流,這也是Java平臺的重要賣點。然而,正如顧客購物一樣
19、,某一商品的功能多并不表示其受歡迎,因為它的易用性可能存在問題,而這一要素往往是顧客非常看重的一方面。類似地,Java EE平臺暴露的Java EE安全性編程模型存在的缺陷很多,而這些缺陷 是迫使開發者、企業轉向其它安全性解決方案的重要“推動力”。下面依次討論列位缺陷。1.1.1可移植性差現如今,無論是商用的 Java EE容器,還是開源 Java EE容器,它們已經逐漸走向同質化。比如,開源領域的Apache Tomcat、Jetty、JBoss、SpringSource dm Server 等;商用領域的Oracle WebLogic、IBM WebSphere (WAS )。同質化,意味
20、著客戶 (即部署Java EE 應用的企業)將不再去過多計較自身的生產系統采納何種Java EE容器,他們會把更多精力放在如何提升各自企業應用本身上。與此同時,只要是企業應用,它們便存在各自的安全性體系架構。架構師、開發者(包括軟件企業)需要保證打造的企業應用能夠同時宿主到各種Java EE容器中。問題來了,如果采納傳統的Java EE安全性編程模型,則開發者不僅要去調整Java EE容器本身的各種安全性配置,而且他們還可能需要調整自身的企業應用。下面舉例說明。當開發者啟用Apache Tomcat內置的HTTP BASIC認證支持時,如果簡單地將用 戶及角色等信息直接存儲到文件中,則需要手工
21、修改位于Tomcat conf目錄中的tomcat-users.xml配置文件。將來,部署在Tomcat中的企業應用便能夠享受到HTTP BASIC認證所帶來的安全性支持了。但如果企業決定要替換原有的Web容 器時,比如將Tomcat換成IBM WAS。此時,開發者又要去了解 WAS是如何存 儲用戶及角色等信息的。在集成業界各種著名第三方安全性解決方案方面,各Java EE容器都有各自的做法,比如 JA-SIG CAS、OpenID、Kerberos/SPNEGO 。借助 Java EE 安全性編程模型較難同它們打交道, 最終開發者很難真正將它們納入到企業應用的研發工作中。即使能夠采納它們,應
22、用的可移植性也將是一個問題。等等,開發者可以想出其它類似場景。從上述示例能夠看出,在采納傳統Java EE 編程模型研發企業應用時,開發者往往需要調整宿主企業應用的Java EE容器中的相關配置文件, 部署環節將變得異常復雜。 這說明,企業應用同Java EE容器耦合在一起,即借助Java EE安全性編程模型研發的企業應用可移 植性差。當企業應用的可移植性差時,我們便不能夠敏捷地響應客戶、市場變化。1.1.2企業級能力差Java EE容器(包括Java SE平臺)內置的企業級特性不少,但要將它們應用到真實的企業應用中,還存在一段距離。具體表現舉例如下。在某些場合,即使是同一企業應用,它可能需要
23、同時啟用多種不同的認證策略。比如,A類用戶(遠程桌面用戶)需要通過HTTP BASIC 認證,而B類用戶(瀏覽器用戶)需要通過HTTP表單認證。如果采納傳統Java EE安全性編程模型,則這 幾乎是比"007”還難完成的任務。如何修改同一web.xml能夠達到這一目標呢?懸!心、.在Java EE安全性編程模型中,開發者很難看到,匿名認證、Remember-Me認證服務、控制并發 HttpSession、自定義退出邏輯等企業級特性。大量的研發及企業生產告訴我們,這些企業級特性是非常實用、基礎的。然而,Java EE安全性編程模型卻沒有提供。等等,開發者可以想出其它類似場景。因此,能夠
24、看出,Java EE安全性編程模型暴露的企業級能力差,不貼近真實的生產。各生產環境存在太多的差異性、不確定性,這些問題不應該直接暴露給開發者。3實戰Spring Security 3.x :快速構建企業級安全1.1.3不便于實施集成測試或CI工作一直以來,這是 Java EE安全性編程模型暴露的重要缺陷。現如今,不進行各類軟件測試工作的軟件團隊是極不負責任的。具體表現在如下幾方面。研發企業應用期間,開發者較難編寫出脫離 Java EE容器的集成測試代碼。這主要是因為Java EE應用同Java EE容器耦合在一起。此時,即使開發者能夠編寫出基 于JUnit/TestNG 的集成測試代碼,則必須
25、同時啟動Java EE容器,并將這些測試代碼部署到容器中才能夠見識到這些測試代碼的效果。不夠敏捷的又一體現。為搭建功能或性能測試環境, 部署或測試人員需要修改 Java EE容器中的不少配置 文件,以滿足Java EE安全性編程模型的要求。 試想,如果找到任一 Java EE容器, 直接將企業應用部署到其中, 則整個企業應用的安全性體系即可生效,則這是最好不過的事情。努力尋找這類安全性體系中 因為上述原因,廣為業界使用的持續集成(Continuous Integration, CI)設施無法派上用場,或者說不能夠最大化CI的價值。幾乎可以認為,如果企業應用的各類集成測試工作不能夠順利進行,尤其
26、是被CI自動完成,則研發效率、軟件如何交付能力將大打折扣,后果很嚴重。最終,大量的人力、物力 資源遭到浪費,進而影響到團隊斗志。1.1.4 Spring Security成功挑戰Java EE安全性編程模型從2006年開始,Spring Security (Acegi )成為了企業級 Java安全性領域的一片旗幟。借助Spring Security構建企業應用的安全性體系期間,我們能夠享受到如下優勢。應用的可移植性非常好,所有同安全性相關的內容都將內置在應用本身,比如WAR包中。部署這類應用期間,不用去修改目標Java EE容器中同安全性相關的任何配置文件。企業級能力很強,因為 Spring
27、Security 源自實踐。作為一開源框架,或者說安全 性平臺,其發展速度是傳統 Java EE安全性編程模型無法比擬的。比如,在集成第 三方安全性解決方案時、提供各種新的企業級安全性特性時。由于Spring Security 構建在Spring基礎上,這使得各類集成測試及CI工作能夠上述優勢集合說明,Spring Security 優雅地解決了傳統 Java EE安全性編程模型存在的 各種致命缺陷。1.2 揭秘 Spring Security開發者可能會問,Spring Security是如何克服傳統 Java EE安全性編程模型內置的缺陷 集合呢?下面一一揭露相關內容。 至于具體的使用和實
28、現細節,則需要在日后的實踐和閱讀 工作中體現。1.2.1基于過濾器鏈的設計同Web容器解耦的重要法寶在傳統Java EE安全性編程模型中,開發者需要在 web.xml中表達HTTP安全性需求。 如果安全性需求非常復雜,而且靈活多變,尤其是要外在化管理它們時,比如借助MySQL數據庫動態管理安全性體系,則 web.xml顯然是不能夠滿足此類場景的。考慮到真實企業環境的多樣化,Spring Security借助過濾器鏈(javax.servlet.FilterChain )描述和承載HTTP安全性需求。過濾器鏈是標準Java EE行為,它由若干過濾器構成。不同過濾器可實現不同HTTP訪問控制目的,
29、比如判斷HttpSession是否已經創建、當前用戶是否已創建了其它 HttpSession等。可以預見,借助過濾器鏈,開發者可以實現復雜HTTP安全性需求。開發者可能會問, 過濾器需要配置在 web.xml中,如果需要調整 HTTP訪問控制,則也 需要不斷調整 web.xml。下節內容能夠打消您的這種擔憂, 因為Spring Security構建在Spring 基礎上,過濾器鏈可以配置在 Spring DI容器中,而且這是 Spring Security的默認行為。1.2.2構建在Spring基礎之上Spring 3.0平臺在引領 Java EE的未來,Spring Security承載在這
30、一平臺上面。上述過濾 器鏈中各過濾器的配置可以由Spring完成,比如借助 org.springframework.web.filter包中的DelegatingFilterProxy過濾器代理類能夠實現這一目的。事實上,Spring Security不僅能夠保護 HTTP資源(Web資源),業務方法和領域對象 都是它能夠保護的內容。為了保證最小的入侵性,Spring Security啟用了 Spring AOP技術實現對業務方法、領域對象的保護。與此同時,Spring針對代碼級的集成測試工作提供了一完整的解決方案,這為SpringSecurity順利實施集成測試工作奠定了良好的基礎。1.2.
31、3 Spring Security內置的企業級特性集合Spring Security內置了大量企業級特性,它們或者同Java EE容器內置的安全性支持進行了很好的融合,或者同第三方安全性解決方案進行了很好的整合工作,或者是自身開發的專有特性,或者留出了不少擴展接口供開發者實現新的企業級特性。這些企業級特性目的只有一個,即改善企業應用的安全性、提升研發效率。下面一一列舉出它們,排名不分先后。內置了各種 HTTP認證支持,其中包括 HTTP BASIC、HTTP Digest、HTTP表單認 證、HTTP SSL( X.509 )認證。針對Web資源、業務方法、領域對象提供了一整套認證和授權解決方
32、案。Spring Security能夠融入到任何類型的企業應用中,無論目標應用是否采用SpringWeb Flow,還是 Spring BalzeDS Integration ,還是 Spring Web Services,還是 Spring Batch,還是普通非Spring桌面應用等。提供了許多JSP標簽庫,以完成各種認證及授權操作。集成了多種第三方 SSO解決方案,比如 JA-SIG CAS、OpenID、Kerberos/SPNEGO 等。支持 RDBMS、LDAP、XML、.properties 等認證源。兼容于Java EE安全性編程模型,并能夠在同一Java EE應用中同時啟用
33、SpringSecurity和Java EE安全性編程模型。提供了大量的實用企業級特性,比如匿名認證、Remember-Me認證服務、控制并發HttpSession、自定義退出邏輯、Run-As認證服務等。支持用戶在 HTTP和HTTPS傳輸渠道間動態切換。Spri ng Security 的任意組成部分都可以被替換、擴展。1.3小結Java EE (包括Java SE)平臺內置的安全特性集合非常豐富,然而它們暴露給開發者、 企業的客戶視圖,即安全性編程模型存在諸多缺陷,其中以可移植性差、企業級能力差、難并依此揭開了研究于開展各種集成測試工作為代表。本章圍繞這些內容進行了全方位闡述,Sprin
34、g Security 的序幕。下章內容將正式進入到Spring Security實踐中。7實戰Spring Security 3.x :快速構建企業級安全8實戰Spring Security 3.x :快速構建企業級安全2 觸動 Spring Security 3.0本章將圍繞Spring Security發布包內置的兩個 Demo展開論述,開發者將從它們身上獲得對Spring Security的感性認識。這里暫時不會去探討它們的技術細節,本書后續內容負責深入討論它們。由于這兩個Demo內置在Spring Security發布包中,我們還是從下載SpringSecurity發布包開始吧!2.1
35、 下載 Spring Security 發布包 ,這是下載 Spring Security 發布包的入口。圖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、壓工作。其中內置了對應的 Jar包集合、源碼、兩個Demo、文檔(包括Javadoc和Referenee Documentation )。F面來依次研究這兩個 Demo。2.2 運行及分析內置的 Spring Security Tutorial Application 示 例先來研究 spring-security-samples-tutorial-3.02RELEASE.war 示例應用。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示例應用的部署。啟動Tomcat后,將瀏覽器定位到對應的URL中,開發者便可看到應用的主頁,圖2-2展示了它。圖 2-2 Spring Security Tutorial Application 示例應用的主頁單擊"Secure page”或"Extremely secure page”頁面時,應用會彈出 HTTP登錄表單,具體見圖2-3所示。圖2-3 HTTP 登錄表單這一示例應用內置了rod/koala、dianne/emu、s
38、cott/wombat、peter/opal 等用戶。它們都 具有“ ROLE_USER ”角色,rod和dianne用戶還具有“ ROLE_TELLER ”角色,而rod甚 至還具有“ ROLE_SUPERVISOR ”角色。圖2-4展示了 peter用戶登錄到應用中。Secure PageThis Is 方 由亡todl 風總也 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用戶登錄到應用中注意,只有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 應巨石圖 2-5 peter 用戶試圖訪問"Extremely secure page"頁面當用戶訪問到listAccounts.html頁面(圖2-6)后,如果希望進行各項業務操作,則應用也會彈出 HTTP登錄表單出來。持有 ROLE_SUPERVISOR或ROLE_TELLER 角色的用戶才能夠進行這些業務操作,即rod和dianne用戶。丈啊日卸劉巳醤花世)收歲頭再工具屯_罵助凹 冷收
42、祕 區 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 ”超鏈接,當前用戶將結束當前HttpSession
43、的生命周期。更多使用細節,讀者可以操作體驗一下。2.2.2 分析 Spring Security Tutorial Application 示例這一應用借助 Spring Web MVC 實現展現層,安全性管理工作交給了Spring Security 。從上節能夠了解到,這一示例應用同時啟用了Spring Security內置的Web資源和業務方法的安全性支持,即認證和授權功能。比如,/secure/index.jsp、/secure/extreme/index.jsp便是Web資源,它們是面向 HTTP用戶的。透過位于 WEB-INF中的applicationContext-security
44、.xml 配置文件能夠看到,它持有如下內容。<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頁面允許匿名用戶(未認證用戶)訪問,但一旦他 們打算操作相應的業務操作時,HTTP登錄表單便會出現。如果分析應用的源代碼,讀者會發現,bigbank.BankService接口的post()方法簽名如下,在listAccounts.html頁面進行業務操 作時會調用到這一業務方法。PreAuthorize是Spring Security內置的、用于保護業務方法的重要注解。PreAuthorize ("hasRole('
46、 ROLE_SUPERVISOR or " +"hasRole(' ROLE_TELLER) and 併 account.balance + #amount >= -#account.overdraft)") public Account post(Account account, double amount);更多Spring Security使用細節,我們將在后續內容中一一闡述。2.3運行及分析內置的 Con tacts Sample Applicatio n 示例再來研究 spring-security-samples-contacts-3.0
47、.2.RELEASE.war 示例應用。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示例應用的部署。啟動Tomcat后,將瀏覽器定位到對應的URL中,開發者便可看到應用的主頁,圖2-7展示了它。圖 2-7 Contacts Sample Application 示例應用的主頁當單擊“ Manager”或“ Debug”超鏈接
48、時,瀏覽器會將用戶帶到登錄頁面,圖2-8所示。圖 2-8 登錄 Contacts Sample Application圖2-9展示了 rod用戶登錄到debug.jsp頁面的情形,這一頁面展示了當前登錄用戶的相 關信息,比如持有的角色集合等。圖 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創 ±Air 吧戸 嘖 HA |j i>Xbill* s Contacts1
50、5實戰Spring Security 3.x :快速構建企業級安全盟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#實戰Spring
51、 Security 3.x :快速構建企業級安全#實戰Spring Security 3.x :快速構建企業級安全1用.11膽 (! u clwirian£«3 n 'tBDfcLr)#實戰Spring Security 3.x :快速構建企業級安全#實戰Spring Security 3.x :快速構建企業級安全圖 2-10 /secure/index.htm 頁面2.3.2 分析 Con tacts Sample Application 示例Spring Web MVC用來實現這一 Web示例的展現層,與此同時, Spring Security接管了 相應的安全
52、性控制。 同Spring Security Tutorial Application 示例應用相比,這一 Demo的如下 幾方面同它存在重大差異。其一,Contacts Sample Application示例啟用了 Spring Security內置的領域對象安全性支 持,applicati onCon text-com mon-authorizati on. xml酉己置文件證實了這一點,本書后續章節會深入闡述到它。針對領域對象提供安全性支持,這是一項重要的企業級特性。其二,將認證信息存儲到HSQLDB 數據庫中,applicationContext-common-business.xml
53、配置文件說明這一切, 其定義的“ dataSource"受管Bean定義了數據源,而DataSourcePopulator 實用類初始化了這一數據庫,它同時持有業務資料庫。其三,Con tacts Sample Applicati on 示例的登錄表單是由應用自身提供的,即logi n.jsp。在 Spring Security Tutorial Application 示例中,HTTP 登錄表單是由 Spring Security 提供的, 下面摘錄了 即plicationContext-security.xml配置文件中的相關片段。vform-login login-page=&
54、quot;/login.jsp"authentication-failure-url="/login.jsp?login_error=1"/>如果開發者屏蔽掉這段配置,則同樣可以使用這一示例。此時,登錄憑證的收集工作將 改成HTTP BASIC認證,而不再是 HTTP表單認證。圖2-11展示了 HTTP BASIC認證的使用。圖2-11 啟用HTTP BASIC 認證更多Spring Security使用細節,我們將在后續內容中一一闡述。2.4下載持續更新的Spring Security源碼目前,Spring Security項目存儲在 Git配置庫中。借助
55、如下Git命令行,能夠獲得最新的項目源碼。git clone git://spring-security/spring-security.git這里面存在Spring Security發布包沒有包括的內容,尤其是有很多Demo,供開發者學習、參考。2.5小結Spring Security建立了感性認識。從下章開始,我們將系統性透過本章內容,開發者對研究 Spring Security。3 Spring Security內置的Java EE應用認證支持收集登錄用戶的憑證策略多種多樣,比如HTTP表單、BASIC認證、X.509 CA證書、HTTP Dige
56、st,甚至包括 SSO等策略。本章將專注 4種常見的Java EE應用認證機制。3.1安全性認證概述假設一下:使用網銀系統不用用戶帳號、進出候機大廳不用安檢。這些都是很危險的行為。很顯然,加強安全性管理顯得格外重要。因此,類似地,企業級系統都應該要求用戶登 錄(認證),至于登錄的方式或策略,則需要依據實際情況操作。對于企業級Java應用而言,Java EE規范規定了若干種認證策略,比如HTTP表單、BASIC認證、X.509 CA證書、HTTP Digest。各Java EE容器必須內置這些認證支持。與此同時,Spring Security也內置了這些認證支持。開發者可能會問,既然 Java EE容器必須內置這些認證機制,Spring Security為什么要重復發明輪子。原因很簡單,如果企業應用采用Java EE容器內置的安全性支持,則應用的可移植性和靈活性將很差,相反,Spring Security使能應用的可移植性和靈活性能夠得到保證。還記得我們在第2章演示的那兩個 Demo吧,我們在部署它們期間,幾乎沒有修改Apache Tomcat的任何內容。有關Java EE容器內置
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 多層住宅小區建筑工程施工組織總設計
- 阿卡服飾設計專業介紹
- 疫苗接種:兒童健康守護-全面解讀兒童疫苗與免疫系統
- 一年級學習情況匯報-學生學習情況匯報
- 多功能健身器設計
- 2025年中國超薄自動鞋套機項目投資可行性研究報告
- 2025年中國蜂巢式陶瓷轉輪除濕干燥機市場調查研究報告
- 2025年中國苯丙改性乳液市場現狀分析及前景預測報告
- 2025年中國自動粉煤灰裝袋機項目投資可行性研究報告
- 2025年中國聚酯薄膜膠帶市場調查研究報告
- 高效水泥助磨劑PPT課件(PPT 66頁)
- 藍色大氣商務商業計劃書PPT模板
- 生物防治第三講
- 旁站監理實施細則(完整版)
- 學業水平考試復習高中語文文言文課本翻譯
- 蘇教版二年級(下冊)科學全冊單元測試卷含期中期末(有答案)
- 常用原料凈料率參照表
- 高低溫試驗報告
- 第一章 混凝土拌合站組織機構框圖及崗位職責
- 指南預應力簡支t形梁橋
- 湘教版八年級數學下冊第3章《圖形與坐標》復習
評論
0/150
提交評論