領先一步
VMware 提供培訓和認證,助您加速進步。
瞭解更多我們很高興地宣佈 Spring Security 3.0 的第一個里程碑版本現已可供 下載。該版本也可透過 Maven 里程碑儲存庫獲得,地址為http://maven.springframework.org/milestone。與 Spring 3.0 一樣,這是第一個要求最低 JDK 1.5 才能執行的釋出版本,並且還需要 Spring 3.0,因此如果您還沒有使用 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 模組(有關如何實現這一點,請參閱 Contacts 示例配置)。您可以按名稱訪問任何方法引數作為表示式變數,前提是您的程式碼已編譯除錯資訊。任何 Spring-EL 功能都可以在表示式中使用,因此您也可以訪問引數上的屬性。例如,如果您希望某個方法只允許使用者訪問,該使用者的使用者名稱與聯絡人匹配,您可以編寫
@PreAuthorize("#contact.name == principal.name)")
public void doSomething(Contact contact);
這裡我們正在訪問另一個內建表示式,即當前 Spring Security 的“principal”Authentication物件,該物件從安全上下文中獲取。您還可以使用表示式名“authentication”直接訪問Authentication物件本身。授權也可以在方法呼叫發生後進行,使用@PostAuthorize註解。要訪問方法的返回值,請在表示式中使用內建名稱“returnObject”。
@PreAuthorize("hasRole('ROLE_USER')")
@PostFilter("hasPermission(filterObject, 'read') or hasPermission(filterObject, 'admin')")
public List getAll();
當與@PostFilter註解一起使用時,Spring Security 會遍歷返回的集合,並刪除其中 supplied 表示式為 false 的元素。“filterObject”名稱指的是集合中的當前物件。您也可以在方法呼叫之前進行過濾,使用@PreFilter,儘管這可能是一個不太常見的要求。語法相同,但如果有一個以上的引數是集合型別,則必須使用該註解的“filterTarget”屬性按名稱選擇一個。
Spring Security 2.0.4 包結構
| Jar 名稱 | 描述 | 何時使用 | 根包(s) |
|---|---|---|---|
| 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 包及其子包包含框架中使用的基本類和介面,core jar 中的另外兩個主要包是 authentication 和 access。access 包包含訪問控制/授權程式碼,如 AccessDecisionManager 和相關的基於投票者的實現,攔截和方法安全基礎設施,註解類以及對 Spring Security 3.0 基於表示式的訪問控制的支援。authentication 包包含 AuthenticationManager 和相關類(如身份驗證異常類),基於 DAO 的簡單身份驗證提供程式和密碼編碼器。專案網站也已更新。FAQ 有一些新問題,還有一個新頁面連結到演示影片和線上文章。請檢視並告知我們您希望在那裡看到什麼(外部安全連結頁面已在開發中)。
Spring Security 3 還有很多工作要做,但我們希望您能嘗試此里程碑版本,並對新的表示式語言支援提供反饋。您可以在Jira Changelog 中找到迄今為止所有更改的完整列表,您也可以在那裡找到指向當前專案路線圖的連結。
社群論壇是提問關於 Spring Security 用法或討論新功能最佳地點。或者,如果您發現任何問題,可以提交一個Jira Issue。
我們希望您喜歡使用Spring Security。