取得領先
VMware 提供培訓和認證,以加速您的進展。
了解更多我們很高興宣布 Spring Security 3.0 的第一個里程碑版本現在可以下載了。此版本也可透過 Maven 里程碑儲存庫取得,網址為http://maven.springframework.org/milestone。與 Spring 3.0 一樣,這是第一個需要最低 JDK 1.5 才能執行,並且也需要 Spring 3.0 的版本,因此如果您尚未使用的話,應該取得 Spring 3.0.0.M3 版本。那麼這個版本有哪些新增功能和變更?
<http use-expressions="true">
<intercept-url pattern="/secure/**" access="hasRole('ROLE_SUPERVISOR') and hasIpAddress('192.168.1.0/24')" />
...
</http>;
內建的hasRole('ROLE_SUPERVISOR')表達式沒什麼特別的 - 它只是檢查目前使用者的權限列表,如果他們具有給定的角色,則傳回 true。但是我們新增了一個額外的表達式,用於指定發出請求的 IP 位址必須在子網路/遮罩引數定義的範圍內。這可能不具有實際用途,具體取決於您的網路設定,但它說明了基於表達式的方法有多強大。先前包含在 "access" XML 屬性中的安全性屬性列表已替換為布林表達式。如果它的評估結果為 "true",則將授予存取權。如果它的評估結果為 "false",則將拒絕存取權。
<global-method-security pre-post-annotations="enabled"/>
最明顯有用的註解是@PreAuthorize,它控制是否可以實際調用方法。例如(來自 "Contacts" 範例應用程式)
@PreAuthorize("hasRole('ROLE_USER')")
public void create(Contact contact);
這意味著僅允許具有 "ROLE_USER" 角色的使用者存取。這裡沒有什麼新鮮的。但是如果
@PreAuthorize("hasPermission(#contact, 'admin')")
public void deletePermission(Contact contact, Sid recipient, Permission permission);
在這裡,我們實際上是使用方法引數作為表達式的一部分,以決定目前使用者是否具有給定連絡人的 "admin" 權限。通過應用程式上下文,
hasPermission()表達式被連結到Spring Security ACL模組中(請參考聯絡人範例來了解是如何實現的)。你可以使用名稱,作為表達式變數來存取任何方法參數,前提是你的程式碼在編譯的時候有偵錯資訊。任何Spring-EL的功能都可以在表達式中使用,所以你也可以存取引數中的屬性。舉例來說,如果你希望特定的方法只允許其使用者名稱與聯絡人使用者名稱相符的使用者存取,你可以這樣寫
@PreAuthorize("#contact.name == principal.name)")
public void doSomething(Contact contact);
在這裡,我們正在存取另一個內建表達式,它是從安全性上下文中取得的當前 Spring SecurityAuthentication物件的 "principal"。您也可以使用表達式名稱 "authentication" 直接存取Authentication物件本身。也可以在使用@PostAuthorize註解後,在方法調用完成後執行授權。要存取方法的回傳值,請在表達式中使用內建名稱 "returnObject"。
@PreAuthorize("hasRole('ROLE_USER')")
@PostFilter("hasPermission(filterObject, 'read') or hasPermission(filterObject, 'admin')")
public List getAll();
當與@PostFilter註解一起使用時,Spring Security 會迭代回傳的集合,並移除提供的表達式為 false 的任何元素。名稱 "filterObject" 是指集合中的目前物件。您也可以在使用@PreFilter之前進行篩選,儘管這可能是一個不太常見的需求。語法是相同的,但如果有多個引數是集合類型,則必須使用此註解的 "filterTarget" 屬性依名稱選擇一個。
Spring Security 2.0.4 套件結構
Jar 名稱 | 描述 | 何時使用 | 根套件 |
---|---|---|---|
spring-security-core | 核心驗證和存取控制類別和介面。遠端支援和基本佈建 API。 | 任何使用 Spring Security 的應用程式都需要。支援獨立應用程式、遠端用戶端、方法(服務層)安全性以及 JDBC 使用者佈建。 | org.springframework.security.core 、org.springframework.security.access 、org.springframework.security.authentication 、org.springframework.security.provisioning 、org.springframework.security.remoting |
spring-security-web | 篩選器和其他 Web 安全性基礎結構以及相關代碼。任何具有 servlet API 依賴性的內容。 | 如果您需要 Spring Security Web 驗證服務和基於 URL 的存取控制 | org.springframework.security.web |
spring-security-config | 命名空間剖析代碼。 | 如果您使用的是 Spring Security XML 命名空間。 | org.springframework.security.config |
spring-security-ldap | LDAP 驗證和佈建代碼。 | 如果您需要使用 LDAP 驗證或管理 LDAP 使用者項目。 | org.springframework.security.ldap |
spring-security-acl | 網域物件 ACL 實作。 | 如果您需要將安全性套用到應用程式中的特定網域物件實例。 | org.springframework.security.acls |
spring-security-cas-client | Spring Security 的 CAS 用戶端整合。 | 如果您想使用 Spring Security Web 驗證和 CAS 單一登入伺服器。 | org.springframework.security.cas |
spring-security-openid | OpenID Web 驗證支援。 | 如果您需要針對外部 OpenID 伺服器驗證使用者。 | org.springframework.security.openid |
Spring Security 3.0.0.M1 Jar 依賴關係
Spring Security 3.0.0.M1 套件結構
core
套件和子套件包含框架中使用的基本類別和介面,核心 jar 中的其他兩個主要套件是 authentication
和 access
。access
套件包含存取控制/授權代碼,例如 AccessDecisionManager
和相關的基於投票者的實作、攔截和方法安全性基礎結構、註解類別以及對 Spring Security 3.0 基於表達式的存取控制的支援。authentication
套件包含 AuthenticationManager
和相關類別(例如驗證例外類別)、基於 DAO 的簡單驗證提供者和密碼編碼器。專案網站也已更新。常見問題解答有一些新問題,並且有一個新頁面包含指向簡報影片和線上文章的連結。請看看並告訴我們您想在那裡看到什麼(外部安全連結頁面已經在工作中)。
Spring Security 3 仍有很多工作要做,但我們希望您能試用此里程碑版本,並提供有關新表達式語言支援的一些回饋。您可以在 Jira 變更日誌中找到迄今為止的完整變更清單,並且您還可以在那裡找到指向目前專案路線圖的連結。
社群論壇是詢問有關使用 Spring Security 的問題或開始討論新功能的最佳場所。或者,如果您發現任何問題,您可以提出 Jira 問題。
我們希望您喜歡使用 Spring Security。