Spring Security使用Lambda DSL配置流程詳解
1. 概述
在 Spring Security 5.2 中增強(qiáng)了 DSL 的功能:允許使用 Lambda 表達(dá)式來配置 HTTP security 。
需要注意的是:先前版本的配置風(fēng)格仍然是有效的且受支持的。Spring 官方額外新增 Lambda 表達(dá)式是為了提高代碼的靈活性,只是一個可選的用法。
下面讓我們看一下 Lambda 表達(dá)式配置 HTTP security 和先前的配置風(fēng)格的對比。
2. 新老配置風(fēng)格對比
Lambda風(fēng)格
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests(authorizeRequests ->
authorizeRequests
.antMatchers("/blog/**").permitAll()
.anyRequest().authenticated()
)
.formLogin(formLogin ->
formLogin
.loginPage("/login")
.permitAll()
)
.rememberMe(withDefaults());
}
}
等效的舊配置風(fēng)格
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/blog/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.rememberMe();
}
}
對比上述兩種配置風(fēng)格,你會注意到一些關(guān)鍵的不同點:
在 Lambda 風(fēng)格中,不再需要通過 .and() 方法來串聯(lián)配置項。
在調(diào)用 Lambda 方法后,HttpSecurity 對象 http 會自動返回以繼續(xù)執(zhí)行進(jìn)一步的配置。
方法 withDefaults() 可以使用 Spring Security 提供的默認(rèn)值啟用安全功能。這是 Lambda 表達(dá)式 it -> {} 的快捷方式。
3. WebFlux Security
此外,你還可以使用 Lambda 表達(dá)式來配置 WebFlux security ,配置方式與上面基本相似。
舉個例子:
@EnableWebFluxSecurity
public class SecurityConfig {
@Bean
SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
http
.authorizeExchange(exchanges ->
exchanges
.pathMatchers("/blog/**").permitAll()
.anyExchange().authenticated()
)
.httpBasic(withDefaults())
.formLogin(formLogin ->
formLogin
.loginPage("/login")
);
return http.build();
}
}
4. Lambda DSL的目標(biāo)
Lambda DSL 被開發(fā)出來,是為了完成以下的目的:
- 自動縮進(jìn)以提高配置的可讀性。
- 不再需要使用
.and()方法來串聯(lián)配置項。 - Spring Security DSL 與其他 Spring DSLs (例如 Spring Integration 和 Spring Cloud Gateway ) 擁有相似的配置風(fēng)格。
到此這篇關(guān)于Spring Security使用Lambda DSL配置流程詳解的文章就介紹到這了,更多相關(guān)Spring Security Lambda DSL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot集成ip2region實現(xiàn)ip白名單的代碼示例
ip2region v2.0 - 是一個離線IP地址定位庫和IP定位數(shù)據(jù)管理框架,10微秒級別的查詢效率,提供了眾多主流編程語言的 xdb 數(shù)據(jù)生成和查詢客戶端實現(xiàn),本文介紹了SpringBoot集成ip2region實現(xiàn)ip白名單的代碼工程,需要的朋友可以參考下2024-08-08
基于maven搭建一個ssm的web項目的詳細(xì)圖文教程
這篇文章主要介紹了基于maven搭建一個ssm的web項目的詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09
SpringBoot中@RestControllerAdvice注解的使用
這篇文章主要介紹了SpringBoot中@RestControllerAdvice注解的使用,@RestControllerAdvice主要用精簡客戶端返回異常,它可以捕獲各種異常,需要的朋友可以參考下2024-01-01
Java利用Dijkstra和Floyd分別求取圖的最短路徑
本文主要介紹了圖的最短路徑的概念,并分別利用Dijkstra算法和Floyd算法求取最短路徑,最后提供了基于鄰接矩陣和鄰接表的圖對兩種算法的Java實現(xiàn)。需要的可以參考一下2022-01-01

