版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)戰(zhàn)Spring Security 3.x :快速構(gòu)建企業(yè)級(jí)安全羅時(shí)飛著http:/www.ope n-2010年3月25日【版權(quán)所有、侵權(quán)必究】序VII前言IX1 企業(yè)級(jí)安全概述11.1 傳統(tǒng)JavaEE安全性編程模型的局限性 .11.1.1 可移植性差 11.1.2 企業(yè)級(jí)能力差 21.1.3 不便于實(shí)施集成測(cè)試或 CI工作 31.1.4 Spring Security 成功挑戰(zhàn)Java EE安全性編程模型 31.2 揭秘 SpringSecurity 基于過濾器鏈的設(shè)計(jì)同 Web容器解耦的重要法寶 41.2.2 構(gòu)建在Spring基礎(chǔ)之上 41.2.3 Spri ng Se
2、curity 內(nèi)置的企業(yè)級(jí)特性集合 51.3 小結(jié)5.2 觸動(dòng) Spring Security 3.0 72.1 下載 SpringSecurity發(fā)布包72.2 運(yùn)行及分析內(nèi)置的 SpringSecurity Tutorial Application 示例72.2.1 運(yùn)行 Spring Security Tutorial Application示例 72.2.2 分析 Spring Security Tutorial Application示例 92.3 運(yùn)行及分析內(nèi)置的 ContactsSampleApplication示例.102.3.1 運(yùn)行 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)用認(rèn)證支持 143.1 安全性認(rèn)證概述 143.1.1 安全也是矛盾的統(tǒng)一體 143.2 內(nèi)置的HTTPBASIC認(rèn)證支持 153.2.1 不夠安全的HTTP BASIC認(rèn)證 163.3 內(nèi)置的HTTPDigest認(rèn)證支持163.3.1 安全的 HTTP Digest 認(rèn)證 183.3.2 對(duì)庫中用戶密碼進(jìn)行 MD5加密存儲(chǔ) 183.3.3 有關(guān) Dig
4、estAuthenticationEntryPoint的更多細(xì)節(jié) 193.4 內(nèi)置的HTTP表單認(rèn)證支持 203.4.1 靈活控制登錄時(shí)頁面的跳轉(zhuǎn)邏輯 213.4.2 定制HTTF登錄表單的處理URL 213.5 內(nèi)置的X.509認(rèn)證支持213.5.1 設(shè)置HTTP與HTTPS端口間的映射關(guān)系 243.5.2 如何從X.509證書中抽取用戶名 243.5.3 啟用單向X.509認(rèn)證 253.6 小結(jié)254 分享 Spring Security認(rèn)證支持背后的故事 264.1 過濾器鏈的形成264.1.1 從 springSecurityFilterChain過濾器談起 264.1.2 若干重要策
5、略接口 264.2 匿名認(rèn)證264.3 Remember Me 認(rèn)證服務(wù)264.4 控制并發(fā) HttpSession264.5 切換用戶274.6 自定義退出邏輯274.7 小結(jié)275 集成及管理認(rèn)證信息285.1 認(rèn)證提供者核心策略接口 285.2 處在內(nèi)存中的認(rèn)證信息 285.3 處在關(guān)系數(shù)據(jù)庫中的認(rèn)證信息 285.4 借助LDAP服務(wù)器管理認(rèn)證信息285.5 基于JAAS管理認(rèn)證信息 285.6 小結(jié)286 Spring Security內(nèi)置的 JavaEE應(yīng)用授權(quán)支持 296.1 授權(quán)策略296.2 針對(duì) Web資源的授權(quán)支持 296.3 針對(duì)業(yè)務(wù)方法的授權(quán)支持296.4 小結(jié)297
6、針對(duì)領(lǐng)域?qū)ο蟮氖跈?quán)支持307.1 何謂領(lǐng)域?qū)ο?07.2 小結(jié)308 集成單點(diǎn)登錄及單點(diǎn)退出解決方案 318.1 何謂單點(diǎn)登錄及單點(diǎn)退出 318.2 Spring Security對(duì) 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高級(jí)專題及最佳實(shí)踐 3512.1 重新審視安全性話題3512.2 同用戶認(rèn)證相關(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認(rèn)證 3613.1.2 HTTP Digest 認(rèn)證 3713.1.3 HTTP表 單認(rèn)證 3913.1.4 準(zhǔn)備 X.509 證書 3913.1.5 雙向 X.509 認(rèn)證 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 激活負(fù)載均衡 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ù)補(bǔ)償特性 4917 附錄E:相關(guān)資料 5017.1 圖書50網(wǎng)站50VII序序?yàn)榱嗽谲浖a(chǎn)品中啟用 Java EE容器安全性,我們往往要付出很大代價(jià),因?yàn)镴ava EE容器內(nèi)置的安全性支持存在諸多重大缺點(diǎn),尤其是它的可移植性、企業(yè)級(jí)能力差、難于展開各類集成測(cè)試工作等缺陷,很多企業(yè)應(yīng)用因?yàn)檫@些問題而轉(zhuǎn)向了Spring Security。過去的多年中,基于Spring的Spring Security博得了企業(yè)用戶的歡心。無論是在其內(nèi)部架構(gòu),還是功能方面,它都照顧到多方面的利
11、益,幾乎可以用“藝術(shù)美”形容它。從內(nèi)部架構(gòu)看,采納 Spring及基于它的架構(gòu)能夠很大程度解決企業(yè)應(yīng)用的可移植性問題。事實(shí)上,Spring Security確實(shí)是基于 Spring架構(gòu)的,同一 Spring Security使能應(yīng)用可以 部署到任意Java EE容器中。這一點(diǎn)在如今苛刻的企業(yè)部署環(huán)境顯得格外重要。值得注意的 是,基于Spring Security研發(fā)的企業(yè)應(yīng)用能夠順利進(jìn)行各種集成測(cè)試工作,包括CI工作的開展。從功能上看,Spring Security盡可能不重復(fù)發(fā)明輪子。在很多場(chǎng)合,它盡量集成現(xiàn)有的、 業(yè)界領(lǐng)先的安全性解決方案,比如JA-SIG CAS、OpenID、Kerbe
12、ros。如果某些企業(yè)級(jí)特性非常重要,而又沒有現(xiàn)成的做法,則它會(huì)基于開放標(biāo)準(zhǔn)(或事實(shí)上的標(biāo)準(zhǔn))提供它們,比如 領(lǐng)域?qū)ο笫跈?quán)。在一定場(chǎng)合,某些企業(yè)應(yīng)用可能需要擴(kuò)展 Spring Security。它也是歡迎的,畢竟開放架 構(gòu)、開源協(xié)同工作等是開源項(xiàng)目最基本的行為。因此,我們沒有理由不選擇Spri ng Security去實(shí)施、加強(qiáng)企業(yè)應(yīng)用的安全性。自從Spring Security (Acegi)誕生的那天起,我們便開始采納它,各種軟件產(chǎn)品、企業(yè) 應(yīng)用中都有它的身影。我們希望過去積累的Spring Security經(jīng)驗(yàn)、教訓(xùn)能夠積累下來,并跟進(jìn)持續(xù)發(fā)展的最新版Spring Security,便萌發(fā)
13、了此書的寫作計(jì)劃。雖然本書的主題是圍繞Spring Security展開的,但我們更希望它是一本指導(dǎo)企業(yè)用戶(包括開發(fā)者)如何實(shí)施企業(yè) 級(jí)安全不可或缺的重要圖書。當(dāng)然,Spring Security涉及的知識(shí)面非常廣,加上本人經(jīng)驗(yàn)有限,書中難免出現(xiàn)錯(cuò)誤, 還望同行批評(píng)指正,并提出各種寶貴寫作建議。羅時(shí)飛E_mail : luoshifei2009年于廣州IX前言、八,、*刖言安全,安全,還是安全,全書都將圍繞這一重要話題展開論述。借助Spring Security ,我們能夠快速構(gòu)建企業(yè)級(jí)安全。有關(guān)Spring Security、企業(yè)級(jí)安全話題的探討,全書將一一道來。我們將各章的主體內(nèi)容安排如
14、下。第1章,企業(yè)級(jí)安全概述。主要圍繞Java EE安全性編程模型展開,并試圖將SpringSecurity帶入到開發(fā)者的視野中。第2章,觸動(dòng)Spring Security 3.0。動(dòng)手實(shí)踐它,并獲得感性認(rèn)識(shí)。第3章,Spring Security 內(nèi)置的Java EE應(yīng)用認(rèn)證支持。本章內(nèi)容將圍繞SpringSecurity 內(nèi)置的 HTTP BASIC 認(rèn)證、X.509 認(rèn)證、HTTP 表單認(rèn)證、HTTP Digest 認(rèn) 證展開論述。實(shí)際上,Java EE容器也提供了這些認(rèn)證支持。第4章,分享Spring Security認(rèn)證支持背后的故事。如果說第 3章內(nèi)容揭露了事實(shí) 表面的話,則本章內(nèi)容
15、給出了事實(shí)真相。另外, Spring Security還提供了大量的企 業(yè)級(jí)認(rèn)證特性,比如 Remember-Me認(rèn)證服務(wù)、控制并發(fā) HttpSession、切換用戶、 自定義退出邏輯等,這些內(nèi)容也將在本章得到深入細(xì)致的闡述。第5章,集成及管理認(rèn)證信息。Spring Security支持將認(rèn)證信息存儲(chǔ)到任意場(chǎng)合,比如RDBMS、LDAP、內(nèi)存等。第6章,Spring Security內(nèi)置的Java EE應(yīng)用授權(quán)支持。針對(duì) Web資源、業(yè)務(wù)方法及領(lǐng)域?qū)ο蟮氖跈?quán)操作,Spring Security提供了極其優(yōu)美的集成支持,尤其是其"解 耦”行為。第7章,針對(duì)領(lǐng)域?qū)ο蟮氖跈?quán)支持。在現(xiàn)有的安
16、全性框架及解決方案中,能夠針對(duì)領(lǐng)域?qū)ο髮?shí)施授權(quán)操作的不多,但Spring Security做到了,而且非常優(yōu)雅。第8章,集成單點(diǎn)登錄及單點(diǎn)退出解決方案。第9章,探索及集成 JA-SIG CAS。第10章,探索及集成 OpenID。第11章,探索及集成 Kerberos/SPNEGO。第12章,Spring Security 3.x高級(jí)專題及最佳實(shí)踐。第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)入各自的代碼或腳本,并完成各自運(yùn)行和調(diào)試工作。如果需要不定期更新它們,則可借助如下SVN命令。D:springsourceebooks>svn update任何問題,可以同作者取得聯(lián)系,謝謝!XII實(shí)戰(zhàn)Spring Security 3.x :快速構(gòu)建企業(yè)級(jí)安全1企業(yè)級(jí)安全概述
18、需要首先交代的是,本書主要專注于企業(yè)級(jí)Java安全的研究,尤其是 Spring Security。因此,我們的一切內(nèi)容會(huì)圍繞Java EE安全性編程模型及 Spring Security為中心。本章內(nèi)容將從揭露 Java EE安全性編程模型的缺陷出發(fā),進(jìn)而將Spring Security弓I入進(jìn)來。80%的企業(yè)級(jí)Java應(yīng)用都會(huì)采用Spring Security構(gòu)建自身的安全性體系。1.1傳統(tǒng)Java EE安全性編程模型的局限性在現(xiàn)有的各種安全性架構(gòu)中,Java (包括Java SE、Java ME、Java EE)平臺(tái)的安全性架構(gòu)堪稱一流,這也是Java平臺(tái)的重要賣點(diǎn)。然而,正如顧客購(gòu)物一樣
19、,某一商品的功能多并不表示其受歡迎,因?yàn)樗囊子眯钥赡艽嬖趩栴},而這一要素往往是顧客非??粗氐囊环矫?。類似地,Java EE平臺(tái)暴露的Java EE安全性編程模型存在的缺陷很多,而這些缺陷 是迫使開發(fā)者、企業(yè)轉(zhuǎn)向其它安全性解決方案的重要“推動(dòng)力”。下面依次討論列位缺陷。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è))將不再去過多計(jì)較自身的生產(chǎn)系統(tǒng)采納何種Java EE容器,他們會(huì)把更多精力放在如何提升各自企業(yè)應(yīng)用本身上。與此同時(shí),只要是企業(yè)應(yīng)用,它們便存在各自的安全性體系架構(gòu)。架構(gòu)師、開發(fā)者(包括軟件企業(yè))需要保證打造的企業(yè)應(yīng)用能夠同時(shí)宿主到各種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認(rèn)證支持時(shí),如果簡(jiǎn)單地將用 戶及角色等信息直接存儲(chǔ)到文件中,則需要手工
21、修改位于Tomcat conf目錄中的tomcat-users.xml配置文件。將來,部署在Tomcat中的企業(yè)應(yīng)用便能夠享受到HTTP BASIC認(rèn)證所帶來的安全性支持了。但如果企業(yè)決定要替換原有的Web容 器時(shí),比如將Tomcat換成IBM WAS。此時(shí),開發(fā)者又要去了解 WAS是如何存 儲(chǔ)用戶及角色等信息的。在集成業(yè)界各種著名第三方安全性解決方案方面,各Java EE容器都有各自的做法,比如 JA-SIG CAS、OpenID、Kerberos/SPNEGO 。借助 Java EE 安全性編程模型較難同它們打交道, 最終開發(fā)者很難真正將它們納入到企業(yè)應(yīng)用的研發(fā)工作中。即使能夠采納它們,應(yīng)
22、用的可移植性也將是一個(gè)問題。等等,開發(fā)者可以想出其它類似場(chǎng)景。從上述示例能夠看出,在采納傳統(tǒng)Java EE 編程模型研發(fā)企業(yè)應(yīng)用時(shí),開發(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)用的可移植性差時(shí),我們便不能夠敏捷地響應(yīng)客戶、市場(chǎng)變化。1.1.2企業(yè)級(jí)能力差Java EE容器(包括Java SE平臺(tái))內(nèi)置的企業(yè)級(jí)特性不少,但要將它們應(yīng)用到真實(shí)的企業(yè)應(yīng)用中,還存在一段距離。具體表現(xiàn)舉例如下。在某些場(chǎng)合,即使是同一企業(yè)應(yīng)用,它可能需要
23、同時(shí)啟用多種不同的認(rèn)證策略。比如,A類用戶(遠(yuǎn)程桌面用戶)需要通過HTTP BASIC 認(rèn)證,而B類用戶(瀏覽器用戶)需要通過HTTP表單認(rèn)證。如果采納傳統(tǒng)Java EE安全性編程模型,則這 幾乎是比"007”還難完成的任務(wù)。如何修改同一web.xml能夠達(dá)到這一目標(biāo)呢?懸!心、.在Java EE安全性編程模型中,開發(fā)者很難看到,匿名認(rèn)證、Remember-Me認(rèn)證服務(wù)、控制并發(fā) HttpSession、自定義退出邏輯等企業(yè)級(jí)特性。大量的研發(fā)及企業(yè)生產(chǎn)告訴我們,這些企業(yè)級(jí)特性是非常實(shí)用、基礎(chǔ)的。然而,Java EE安全性編程模型卻沒有提供。等等,開發(fā)者可以想出其它類似場(chǎng)景。因此,能夠
24、看出,Java EE安全性編程模型暴露的企業(yè)級(jí)能力差,不貼近真實(shí)的生產(chǎn)。各生產(chǎn)環(huán)境存在太多的差異性、不確定性,這些問題不應(yīng)該直接暴露給開發(fā)者。3實(shí)戰(zhàn)Spring Security 3.x :快速構(gòu)建企業(yè)級(jí)安全1.1.3不便于實(shí)施集成測(cè)試或CI工作一直以來,這是 Java EE安全性編程模型暴露的重要缺陷?,F(xiàn)如今,不進(jìn)行各類軟件測(cè)試工作的軟件團(tuán)隊(duì)是極不負(fù)責(zé)任的。具體表現(xiàn)在如下幾方面。研發(fā)企業(yè)應(yīng)用期間,開發(fā)者較難編寫出脫離 Java EE容器的集成測(cè)試代碼。這主要是因?yàn)镴ava EE應(yīng)用同Java EE容器耦合在一起。此時(shí),即使開發(fā)者能夠編寫出基 于JUnit/TestNG 的集成測(cè)試代碼,則必須
25、同時(shí)啟動(dòng)Java EE容器,并將這些測(cè)試代碼部署到容器中才能夠見識(shí)到這些測(cè)試代碼的效果。不夠敏捷的又一體現(xiàn)。為搭建功能或性能測(cè)試環(huán)境, 部署或測(cè)試人員需要修改 Java EE容器中的不少配置 文件,以滿足Java EE安全性編程模型的要求。 試想,如果找到任一 Java EE容器, 直接將企業(yè)應(yīng)用部署到其中, 則整個(gè)企業(yè)應(yīng)用的安全性體系即可生效,則這是最好不過的事情。努力尋找這類安全性體系中 因?yàn)樯鲜鲈?,廣為業(yè)界使用的持續(xù)集成(Continuous Integration, CI)設(shè)施無法派上用場(chǎng),或者說不能夠最大化CI的價(jià)值。幾乎可以認(rèn)為,如果企業(yè)應(yīng)用的各類集成測(cè)試工作不能夠順利進(jìn)行,尤其
26、是被CI自動(dòng)完成,則研發(fā)效率、軟件如何交付能力將大打折扣,后果很嚴(yán)重。最終,大量的人力、物力 資源遭到浪費(fèi),進(jìn)而影響到團(tuán)隊(duì)斗志。1.1.4 Spring Security成功挑戰(zhàn)Java EE安全性編程模型從2006年開始,Spring Security (Acegi )成為了企業(yè)級(jí) Java安全性領(lǐng)域的一片旗幟。借助Spring Security構(gòu)建企業(yè)應(yīng)用的安全性體系期間,我們能夠享受到如下優(yōu)勢(shì)。應(yīng)用的可移植性非常好,所有同安全性相關(guān)的內(nèi)容都將內(nèi)置在應(yīng)用本身,比如WAR包中。部署這類應(yīng)用期間,不用去修改目標(biāo)Java EE容器中同安全性相關(guān)的任何配置文件。企業(yè)級(jí)能力很強(qiáng),因?yàn)?Spring
27、Security 源自實(shí)踐。作為一開源框架,或者說安全 性平臺(tái),其發(fā)展速度是傳統(tǒng) Java EE安全性編程模型無法比擬的。比如,在集成第 三方安全性解決方案時(shí)、提供各種新的企業(yè)級(jí)安全性特性時(shí)。由于Spring Security 構(gòu)建在Spring基礎(chǔ)上,這使得各類集成測(cè)試及CI工作能夠上述優(yōu)勢(shì)集合說明,Spring Security 優(yōu)雅地解決了傳統(tǒng) Java EE安全性編程模型存在的 各種致命缺陷。1.2 揭秘 Spring Security開發(fā)者可能會(huì)問,Spring Security是如何克服傳統(tǒng) Java EE安全性編程模型內(nèi)置的缺陷 集合呢?下面一一揭露相關(guān)內(nèi)容。 至于具體的使用和實(shí)
28、現(xiàn)細(xì)節(jié),則需要在日后的實(shí)踐和閱讀 工作中體現(xiàn)。1.2.1基于過濾器鏈的設(shè)計(jì)同Web容器解耦的重要法寶在傳統(tǒng)Java EE安全性編程模型中,開發(fā)者需要在 web.xml中表達(dá)HTTP安全性需求。 如果安全性需求非常復(fù)雜,而且靈活多變,尤其是要外在化管理它們時(shí),比如借助MySQL數(shù)據(jù)庫動(dòng)態(tài)管理安全性體系,則 web.xml顯然是不能夠滿足此類場(chǎng)景的。考慮到真實(shí)企業(yè)環(huán)境的多樣化,Spring Security借助過濾器鏈(javax.servlet.FilterChain )描述和承載HTTP安全性需求。過濾器鏈?zhǔn)菢?biāo)準(zhǔn)Java EE行為,它由若干過濾器構(gòu)成。不同過濾器可實(shí)現(xiàn)不同HTTP訪問控制目的,
29、比如判斷HttpSession是否已經(jīng)創(chuàng)建、當(dāng)前用戶是否已創(chuàng)建了其它 HttpSession等??梢灶A(yù)見,借助過濾器鏈,開發(fā)者可以實(shí)現(xiàn)復(fù)雜HTTP安全性需求。開發(fā)者可能會(huì)問, 過濾器需要配置在 web.xml中,如果需要調(diào)整 HTTP訪問控制,則也 需要不斷調(diào)整 web.xml。下節(jié)內(nèi)容能夠打消您的這種擔(dān)憂, 因?yàn)镾pring Security構(gòu)建在Spring 基礎(chǔ)上,過濾器鏈可以配置在 Spring DI容器中,而且這是 Spring Security的默認(rèn)行為。1.2.2構(gòu)建在Spring基礎(chǔ)之上Spring 3.0平臺(tái)在引領(lǐng) Java EE的未來,Spring Security承載在這
30、一平臺(tái)上面。上述過濾 器鏈中各過濾器的配置可以由Spring完成,比如借助 org.springframework.web.filter包中的DelegatingFilterProxy過濾器代理類能夠?qū)崿F(xiàn)這一目的。事實(shí)上,Spring Security不僅能夠保護(hù) HTTP資源(Web資源),業(yè)務(wù)方法和領(lǐng)域?qū)ο?都是它能夠保護(hù)的內(nèi)容。為了保證最小的入侵性,Spring Security啟用了 Spring AOP技術(shù)實(shí)現(xiàn)對(duì)業(yè)務(wù)方法、領(lǐng)域?qū)ο蟮谋Wo(hù)。與此同時(shí),Spring針對(duì)代碼級(jí)的集成測(cè)試工作提供了一完整的解決方案,這為SpringSecurity順利實(shí)施集成測(cè)試工作奠定了良好的基礎(chǔ)。1.2.
31、3 Spring Security內(nèi)置的企業(yè)級(jí)特性集合Spring Security內(nèi)置了大量企業(yè)級(jí)特性,它們或者同Java EE容器內(nèi)置的安全性支持進(jìn)行了很好的融合,或者同第三方安全性解決方案進(jìn)行了很好的整合工作,或者是自身開發(fā)的專有特性,或者留出了不少擴(kuò)展接口供開發(fā)者實(shí)現(xiàn)新的企業(yè)級(jí)特性。這些企業(yè)級(jí)特性目的只有一個(gè),即改善企業(yè)應(yīng)用的安全性、提升研發(fā)效率。下面一一列舉出它們,排名不分先后。內(nèi)置了各種 HTTP認(rèn)證支持,其中包括 HTTP BASIC、HTTP Digest、HTTP表單認(rèn) 證、HTTP SSL( X.509 )認(rèn)證。針對(duì)Web資源、業(yè)務(wù)方法、領(lǐng)域?qū)ο筇峁┝艘徽渍J(rèn)證和授權(quán)解決方
32、案。Spring Security能夠融入到任何類型的企業(yè)應(yīng)用中,無論目標(biāo)應(yīng)用是否采用SpringWeb Flow,還是 Spring BalzeDS Integration ,還是 Spring Web Services,還是 Spring Batch,還是普通非Spring桌面應(yīng)用等。提供了許多JSP標(biāo)簽庫,以完成各種認(rèn)證及授權(quán)操作。集成了多種第三方 SSO解決方案,比如 JA-SIG CAS、OpenID、Kerberos/SPNEGO 等。支持 RDBMS、LDAP、XML、.properties 等認(rèn)證源。兼容于Java EE安全性編程模型,并能夠在同一Java EE應(yīng)用中同時(shí)啟用
33、SpringSecurity和Java EE安全性編程模型。提供了大量的實(shí)用企業(yè)級(jí)特性,比如匿名認(rèn)證、Remember-Me認(rèn)證服務(wù)、控制并發(fā)HttpSession、自定義退出邏輯、Run-As認(rèn)證服務(wù)等。支持用戶在 HTTP和HTTPS傳輸渠道間動(dòng)態(tài)切換。Spri ng Security 的任意組成部分都可以被替換、擴(kuò)展。1.3小結(jié)Java EE (包括Java SE)平臺(tái)內(nèi)置的安全特性集合非常豐富,然而它們暴露給開發(fā)者、 企業(yè)的客戶視圖,即安全性編程模型存在諸多缺陷,其中以可移植性差、企業(yè)級(jí)能力差、難并依此揭開了研究于開展各種集成測(cè)試工作為代表。本章圍繞這些內(nèi)容進(jìn)行了全方位闡述,Sprin
34、g Security 的序幕。下章內(nèi)容將正式進(jìn)入到Spring Security實(shí)踐中。7實(shí)戰(zhàn)Spring Security 3.x :快速構(gòu)建企業(yè)級(jí)安全8實(shí)戰(zhàn)Spring Security 3.x :快速構(gòu)建企業(yè)級(jí)安全2 觸動(dòng) Spring Security 3.0本章將圍繞Spring Security發(fā)布包內(nèi)置的兩個(gè) Demo展開論述,開發(fā)者將從它們身上獲得對(duì)Spring Security的感性認(rèn)識(shí)。這里暫時(shí)不會(huì)去探討它們的技術(shù)細(xì)節(jié),本書后續(xù)內(nèi)容負(fù)責(zé)深入討論它們。由于這兩個(gè)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)置了對(duì)應(yīng)的 Jar包集合、源碼、兩個(gè)Demo、文檔(包括Javadoc和Referenee Documentation )。F面來依次研究這兩個(gè) Demo。2.2 運(yùn)行及分析內(nèi)置的 Spring Security Tutorial Application 示 例先來研究 spring-security-samples-tutorial-3.02RELEASE.war 示例應(yīng)用。2.2.1 運(yùn)行 Spring Security Tutorial Application 示例直接將 sprin g-security-samples-tutorial-3.0.2.RELEASE.war
37、 拷貝到 Apache Tomcat 的webapps 目錄中,即完成 Spring Security Tutorial Application示例應(yīng)用的部署。啟動(dòng)Tomcat后,將瀏覽器定位到對(duì)應(yīng)的URL中,開發(fā)者便可看到應(yīng)用的主頁,圖2-2展示了它。圖 2-2 Spring Security Tutorial Application 示例應(yīng)用的主頁單擊"Secure page”或"Extremely secure page”頁面時(shí),應(yīng)用會(huì)彈出 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”頁面,因?yàn)檫@一頁面要求登錄用戶具有“ ROLE_SUPERVISOR ”角色。如果其它用戶試圖訪問它,貝UHTTP 403拒絕訪問錯(cuò)誤會(huì)打印出來,見圖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)后,如果希望進(jìn)行各項(xiàng)業(yè)務(wù)操作,則應(yīng)用也會(huì)彈出 HTTP登錄表單出來。持有 ROLE_SUPERVISOR或ROLE_TELLER 角色的用戶才能夠進(jìn)行這些業(yè)務(wù)操作,即rod和dianne用戶。丈啊日卸劉巳醤花世)收歲頭再工具屯_罵助凹 冷收
42、祕(mì) 區(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、的生命周期。更多使用細(xì)節(jié),讀者可以操作體驗(yàn)一下。2.2.2 分析 Spring Security Tutorial Application 示例這一應(yīng)用借助 Spring Web MVC 實(shí)現(xiàn)展現(xiàn)層,安全性管理工作交給了Spring Security 。從上節(jié)能夠了解到,這一示例應(yīng)用同時(shí)啟用了Spring Security內(nèi)置的Web資源和業(yè)務(wù)方法的安全性支持,即認(rèn)證和授權(quán)功能。比如,/secure/index.jsp、/secure/extreme/index.jsp便是Web資源,它們是面向 HTTP用戶的。透過位于 WEB-INF中的applicationContext-security
44、.xml 配置文件能夠看到,它持有如下內(nèi)容。<intercept-url/>元素能夠控制用戶對(duì)Web資源的訪問操作,這里使用到Spring EL表達(dá)式語言。<intercept-url pattern="/secure/extreme/*" access="hasRole('ROLE_SUPERVISOR"/><intercept-url pattern="/secure/*" access="isAuthenticated()"/><intercept-url p
45、attern="/*" access="permitAll"/>大家是否注意到,listAccounts.html頁面允許匿名用戶(未認(rèn)證用戶)訪問,但一旦他 們打算操作相應(yīng)的業(yè)務(wù)操作時(shí),HTTP登錄表單便會(huì)出現(xiàn)。如果分析應(yīng)用的源代碼,讀者會(huì)發(fā)現(xiàn),bigbank.BankService接口的post()方法簽名如下,在listAccounts.html頁面進(jìn)行業(yè)務(wù)操 作時(shí)會(huì)調(diào)用到這一業(yè)務(wù)方法。PreAuthorize是Spring Security內(nèi)置的、用于保護(hù)業(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使用細(xì)節(jié),我們將在后續(xù)內(nèi)容中一一闡述。2.3運(yùn)行及分析內(nèi)置的 Con tacts Sample Applicatio n 示例再來研究 spring-security-samples-contacts-3.0
47、.2.RELEASE.war 示例應(yīng)用。2.3.1 運(yùn)行 Con tacts Sample Application 示例直接將 spring-security-samples-contacts-3.0.2.RELEASE.war 拷貝到 Apache Tomcat 的web apps目錄中,即完成 Con tacts Sample Applicatio n示例應(yīng)用的部署。啟動(dòng)Tomcat后,將瀏覽器定位到對(duì)應(yīng)的URL中,開發(fā)者便可看到應(yīng)用的主頁,圖2-7展示了它。圖 2-7 Contacts Sample Application 示例應(yīng)用的主頁當(dāng)單擊“ Manager”或“ Debug”超鏈接
48、時(shí),瀏覽器會(huì)將用戶帶到登錄頁面,圖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實(shí)戰(zhàn)Spring Security 3.x :快速構(gòu)建企業(yè)級(jí)安全盟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 運(yùn) E.4»jhiLJ L|#iTinirihh liA JenLVthiL gIcL A-iuri Ffebjuijwi $LF ezul .j'.ML Mfciri FcEauBijOB:tI hvi- I#實(shí)戰(zhàn)Spring
51、 Security 3.x :快速構(gòu)建企業(yè)級(jí)安全#實(shí)戰(zhàn)Spring Security 3.x :快速構(gòu)建企業(yè)級(jí)安全1用.11膽 (! u clwirian£«3 n 'tBDfcLr)#實(shí)戰(zhàn)Spring Security 3.x :快速構(gòu)建企業(yè)級(jí)安全#實(shí)戰(zhàn)Spring Security 3.x :快速構(gòu)建企業(yè)級(jí)安全圖 2-10 /secure/index.htm 頁面2.3.2 分析 Con tacts Sample Application 示例Spring Web MVC用來實(shí)現(xiàn)這一 Web示例的展現(xiàn)層,與此同時(shí), 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酉己置文件證實(shí)了這一點(diǎn),本書后續(xù)章節(jié)會(huì)深入闡述到它。針對(duì)領(lǐng)域?qū)ο筇峁┌踩灾С郑@是一項(xiàng)重要的企業(yè)級(jí)特性。其二,將認(rèn)證信息存儲(chǔ)到HSQLDB 數(shù)據(jù)庫中,applicationContext-common-business.xml
53、配置文件說明這一切, 其定義的“ dataSource"受管Bean定義了數(shù)據(jù)源,而DataSourcePopulator 實(shí)用類初始化了這一數(shù)據(jù)庫,它同時(shí)持有業(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ā)者屏蔽掉這段配置,則同樣可以使用這一示例。此時(shí),登錄憑證的收集工作將 改成HTTP BASIC認(rèn)證,而不再是 HTTP表單認(rèn)證。圖2-11展示了 HTTP BASIC認(rèn)證的使用。圖2-11 啟用HTTP BASIC 認(rèn)證更多Spring Security使用細(xì)節(jié),我們將在后續(xù)內(nèi)容中一一闡述。2.4下載持續(xù)更新的Spring Security源碼目前,Spring Security項(xiàng)目存儲(chǔ)在 Git配置庫中。借助
55、如下Git命令行,能夠獲得最新的項(xiàng)目源碼。git clone git://spring-security/spring-security.git這里面存在Spring Security發(fā)布包沒有包括的內(nèi)容,尤其是有很多Demo,供開發(fā)者學(xué)習(xí)、參考。2.5小結(jié)Spring Security建立了感性認(rèn)識(shí)。從下章開始,我們將系統(tǒng)性透過本章內(nèi)容,開發(fā)者對(duì)研究 Spring Security。3 Spring Security內(nèi)置的Java EE應(yīng)用認(rèn)證支持收集登錄用戶的憑證策略多種多樣,比如HTTP表單、BASIC認(rèn)證、X.509 CA證書、HTTP Dige
56、st,甚至包括 SSO等策略。本章將專注 4種常見的Java EE應(yīng)用認(rèn)證機(jī)制。3.1安全性認(rèn)證概述假設(shè)一下:使用網(wǎng)銀系統(tǒng)不用用戶帳號(hào)、進(jìn)出候機(jī)大廳不用安檢。這些都是很危險(xiǎn)的行為。很顯然,加強(qiáng)安全性管理顯得格外重要。因此,類似地,企業(yè)級(jí)系統(tǒng)都應(yīng)該要求用戶登 錄(認(rèn)證),至于登錄的方式或策略,則需要依據(jù)實(shí)際情況操作。對(duì)于企業(yè)級(jí)Java應(yīng)用而言,Java EE規(guī)范規(guī)定了若干種認(rèn)證策略,比如HTTP表單、BASIC認(rèn)證、X.509 CA證書、HTTP Digest。各Java EE容器必須內(nèi)置這些認(rèn)證支持。與此同時(shí),Spring Security也內(nèi)置了這些認(rèn)證支持。開發(fā)者可能會(huì)問,既然 Java EE容器必須內(nèi)置這些認(rèn)證機(jī)制,Spring Security為什么要重復(fù)發(fā)明輪子。原因很簡(jiǎn)單,如果企業(yè)應(yīng)用采用Java EE容器內(nèi)置的安全性支持,則應(yīng)用的可移植性和靈活性將很差,相反,Spring Security使能應(yīng)用的可移植性和靈活性能夠得到保證。還記得我們?cè)诘?章演示的那兩個(gè) Demo吧,我們?cè)诓渴鹚鼈兤陂g,幾乎沒有修改Apache Tomcat的任何內(nèi)容。有關(guān)Java EE容器內(nèi)置
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 杭州浙江杭州市上城區(qū)文化和廣電旅游體育局編外工作人員招聘筆試歷年參考題庫附帶答案詳解
- 2025版國(guó)際貿(mào)易傭金支付及爭(zhēng)議解決合同3篇
- 安徽2025年安徽商貿(mào)職業(yè)技術(shù)學(xué)院高層次人才引進(jìn)25人筆試歷年參考題庫附帶答案詳解
- 2025年度商鋪?zhàn)赓U合同范本(含租賃保證金退還細(xì)則)3篇
- 二零二五年度車場(chǎng)租賃合同(含車位租賃費(fèi)調(diào)整機(jī)制)3篇
- 2025年人教A版高三化學(xué)上冊(cè)月考試卷含答案
- 2025年滬教版選修3物理下冊(cè)月考試卷含答案
- 2025年粵教新版選擇性必修3歷史上冊(cè)階段測(cè)試試卷含答案
- 2025年度智慧農(nóng)業(yè)蟲害防治與生態(tài)平衡服務(wù)合同3篇
- 2025年新世紀(jì)版九年級(jí)歷史下冊(cè)階段測(cè)試試卷含答案
- 壞死性筋膜炎
- 2024輸血相關(guān)知識(shí)培訓(xùn)
- 整式的加減單元測(cè)試題6套
- 股權(quán)架構(gòu)完整
- 山東省泰安市2022年初中學(xué)業(yè)水平考試生物試題
- 注塑部質(zhì)量控制標(biāo)準(zhǔn)全套
- 人教A版高中數(shù)學(xué)選擇性必修第一冊(cè)第二章直線和圓的方程-經(jīng)典例題及配套練習(xí)題含答案解析
- 銀行網(wǎng)點(diǎn)服務(wù)禮儀標(biāo)準(zhǔn)培訓(xùn)課件
- 二年級(jí)下冊(cè)數(shù)學(xué)教案 -《數(shù)一數(shù)(二)》 北師大版
- 晶體三極管資料
- 銀行內(nèi)部舉報(bào)管理規(guī)定
評(píng)論
0/150
提交評(píng)論