在認識Spring Security之前,所有的權限驗證邏輯都混雜在業務邏輯中,用戶的每個操作以前可能都需要對用戶是否有進行該項操作的權限進行判斷,來達到認證授權的目的。類似這樣的權限驗證邏輯代碼被分散在系統的許多地方,難以維護。AOP(Aspect Oriented Programming)和Spring Security爲我們的應用程序很好的解決了此類問題,正如系統日誌,事務管理等這些系統級的服務一樣,我們應該將它作爲系統一個單獨的“切面”進行管理,以達到業務邏輯與系統級的服務真正分離的目的,Spring Security將系統的安全邏輯從業務中分離出來。
本文代碼運行環境:
JDK6.0
spring-framework-2.5.4
spring-security-2.0.0
JavaEE5
Web容器:
Apache Tomcat6.0
IDE工具:
Eclipse3.3+MyEclipse6.5
操作系統:
Linux(Fedora 8)
這只是我個人的學習總結而已,還請高手們指出本文的不足之處。
一 Spring Security 簡介
這裏提到的Spring Security也就是被大家廣爲熟悉的Acegi Security,2007年底Acegi Security正式成爲Spring Portfolio項目,並更名爲Spring Security.Spring Security是一個能夠爲基於Spring的企業應用系統提供描述性安全訪問控制解決方案的安全框架。它提供了一組可以在Spring應用上下文中配置的Bean,充分利用了Spring IoC(依賴注入,也稱控制反轉)和AOP(面向切面編程)功能,爲應用系統提供聲明式的安全訪問控制功能,減少了爲企業系統安全控制編寫大量重複代碼的工作。
通過在許多項目中實踐應用以及社區的貢獻,如今的Spring Security已經成爲Spring Framework下最成熟的安全系統,它爲我們提供了強大而靈活的企業級安全服務,如:
Ø 認證授權機制
Ø Web資源訪問控制
Ø 業務方法調用訪問控制
Ø 領域對象訪問控制Access Control List(ACL)
Ø 單點登錄(Central Authentication Service)
Ø X509認證
Ø 信道安全(Channel Security)管理等功能
當保護Web資源時,Spring Security使用Servlet 過濾器來攔截Http請求進行身份驗證並強制安全性,以確保WEB資源被安全的訪問。如下圖是Spring Security的主要組件圖(摘自《Spring in Action》):
圖1 Spring Security的基本組件
無論是保護WEB資源還是保護業務方法或者領域對象,Spring Security都的通過上圖中的組件來完成的。本文主要闡述如何使用Spring Security對WEB應用程序的資源進行安全訪問控制,並通過一個簡單的實例來對Spring Security提供的各種過濾器的功能和配置方法進行描述。