Spring Security 5.0.0正式釋出

weixin_34009794發表於2017-12-18

Pivotal正式釋出Spring Security 5.0.0,是2015年3月釋出4.0.0版本以來的第一個大版本。

\\

Spring Security誕生於2004年,當時叫作Acegi,現在由Pivotal工程師Robert Winch領導開發,Robert是Spring SecuritySpring Security 3.1的合著者。5.0.0版本包含了400多項改進和問題修復,包括支援OAuth 2.0、支援Spring WebFlux、可以使用Reactor的StepVerifier進行測試。

\\

InfoQ就Spring Security 5.0.0版本的釋出和未來計劃問題採訪了Robert Winch。

\\

InfoQ:新版本的更新站點看起來很穩定。你能概括一下這一版本的內容嗎?

\\
Winch:Spring Security 5.0.0的主要亮點在於它只需要最小化的JDK 8、反應式安全特性、OAuth 2.0(OIDC)和現代密碼儲存。
\\

InfoQ:你們是怎麼想到現代密碼儲存這個主意的?又是如何實現的?

\\
Winch:在Spring Security 5.0.0之前,密碼是明文儲存,十分不安全。因為這一次釋出的是大版本,所以我們決定使用更安全的密碼儲存方式。 我們有幸與密碼儲存專家John Steven合作,他是OWASP密碼儲存手冊的主要作者。Spring Security現在預設提供的是最新的密碼儲存方式。當然,我們也可以使用其他方式來儲存密碼。
\\

InfoQ:Spring讓我印象深刻的地方在於,它總是能夠急我們之所急,為我們提供我們缺失的功能。你們是如何決定推出哪些特性的?

\\
Winch:我們關注社群進展,為呼聲較高的問題制定解決方案。結果就是要使用最小化的JDK 8,並通過Reactor專案來支援反應式程式設計。
\\

InfoQ:你們打算加快Spring Security的釋出速度嗎?就像Juergen Hoeller所說的那樣,在更短的時間週期內交付已經準備好的特性?

\\
Winch:是的。Spring Security嘗試跟上Spring框架的腳步,確保為Spring框架提供安全保護。
\\

InfoQ:下一個版本的計劃是什麼?

\\
Winch:下一版本,我們計劃把精力集中在完善反應式和OAuth上面。我們也會提供一些工具用於遷移現有的密碼。我們也希望能夠釋出初始版本的OAuth資源伺服器。
\\

現在讓我們來看看增強的方法級別的安全(示例來自Spring Security網站)。

\\

可以使用@EnableGlobalMethodSecurity來啟用基於註解的安全,只要這個類也使用了@Configuration。例如:

\\
\@Configuration\@EnableGlobalMethodSecurity(securedEnabled = true)\public class MethodSecurityConfig {\// ...\}
\\

然後就可以實現方法級別的安全:

\\
\public interface BankService {\\@Secured(\"IS_AUTHENTICATED_ANONYMOUSLY\")\public Account readAccount(Long id);\\@Secured(\"IS_AUTHENTICATED_ANONYMOUSLY\")\public Account[] findAccounts();\\@Secured(\"ROLE_TELLER\")\public Account post(Account account, double amount);\}
\\

有時候可能需要比GlobalMethodSecurity更靈活的方式,那麼可以通過擴充套件GlobalMethodSecurityConfiguration來實現自定義安全策略,並在這個類上面加上@EnableGlobalMethodSecurity:

\\
\@EnableGlobalMethodSecurity(prePostEnabled = true)\public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {\\t@Override\\tprotected MethodSecurityExpressionHandler createExpressionHandler() {\\t\t// ... create and return custom MethodSecurityExpressionHandler ...\\t\treturn expressionHandler;\\t}\}
\\

Reactor專案的反應式流有一個特性,它支援將等待中的執行緒分配給新的任務作業,這就給實現ThreadLocal型別對映帶來了新的挑戰。Reactor為此提供了Context API,它是一種反應式的ThreadLocal map。

\\

在5.0.0版本里,可以通過ReactiveSecurityContextHolder.getContext()方法訪問反應式Context,並在方法呼叫過程中使用token(以及其他應用程式相關資料)。

\\

檢視英文原文Spring Security 5.0.0 Released

相關文章