搶佔先機
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 模組(請參見 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 會遍歷返回的集合,並移除其中提供的表示式為 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 的身份驗證提供者和密碼編碼器。專案網站也已更新。FAQ 添加了一些新問題,並且有一個新頁面包含演示影片和線上文章的連結。請檢視並告知我們您希望在那裡看到什麼(外部安全連結頁面已在計劃中)。
Spring Security 3 仍有很多工作要做,但我們希望您能嘗試這個里程碑版本,並就新的表示式語言支援提供反饋。您可以在 Jira ChangeLog 中找到截至目前為止的完整變更列表,您還可以在那裡找到當前專案路線圖的連結。
社群論壇是提問關於使用 Spring Security 或發起關於新功能討論的最佳場所。另外,如果您發現任何問題,可以提交一個 Jira Issue。
希望您喜歡使用 Spring Security。