Spring Security使用Lambda DSL配置流程詳解
1. 概述
在 Spring Security 5.2 中增強(qiáng)了 DSL 的功能:允許使用 Lambda 表達(dá)式來(lái)配置 HTTP security 。
需要注意的是:先前版本的配置風(fēng)格仍然是有效的且受支持的。Spring 官方額外新增 Lambda 表達(dá)式是為了提高代碼的靈活性,只是一個(gè)可選的用法。
下面讓我們看一下 Lambda 表達(dá)式配置 HTTP security 和先前的配置風(fēng)格的對(duì)比。
2. 新老配置風(fēng)格對(duì)比
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(); } }
對(duì)比上述兩種配置風(fēng)格,你會(huì)注意到一些關(guān)鍵的不同點(diǎn):
在 Lambda 風(fēng)格中,不再需要通過(guò) .and()
方法來(lái)串聯(lián)配置項(xiàng)。
在調(diào)用 Lambda 方法后,HttpSecurity
對(duì)象 http
會(huì)自動(dòng)返回以繼續(xù)執(zhí)行進(jìn)一步的配置。
方法 withDefaults()
可以使用 Spring Security 提供的默認(rèn)值啟用安全功能。這是 Lambda 表達(dá)式 it -> {}
的快捷方式。
3. WebFlux Security
此外,你還可以使用 Lambda 表達(dá)式來(lái)配置 WebFlux security ,配置方式與上面基本相似。
舉個(gè)例子:
@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 被開(kāi)發(fā)出來(lái),是為了完成以下的目的:
- 自動(dòng)縮進(jìn)以提高配置的可讀性。
- 不再需要使用
.and()
方法來(lái)串聯(lián)配置項(xiàng)。 - 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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot集成ip2region實(shí)現(xiàn)ip白名單的代碼示例
ip2region v2.0 - 是一個(gè)離線IP地址定位庫(kù)和IP定位數(shù)據(jù)管理框架,10微秒級(jí)別的查詢(xún)效率,提供了眾多主流編程語(yǔ)言的 xdb 數(shù)據(jù)生成和查詢(xún)客戶(hù)端實(shí)現(xiàn),本文介紹了SpringBoot集成ip2region實(shí)現(xiàn)ip白名單的代碼工程,需要的朋友可以參考下2024-08-08基于maven搭建一個(gè)ssm的web項(xiàng)目的詳細(xì)圖文教程
這篇文章主要介紹了基于maven搭建一個(gè)ssm的web項(xiàng)目的詳細(xì)教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09淺談java中BigDecimal類(lèi)的簡(jiǎn)單用法
這篇文章主要介紹了淺談java中BigDecimal類(lèi)的簡(jiǎn)單用法,在開(kāi)發(fā)時(shí),如果我們需要精確計(jì)算的結(jié)果,必須使用BigDecimal類(lèi)來(lái)操作。感興趣的話可以了解一下2020-07-07SpringBoot中@RestControllerAdvice注解的使用
這篇文章主要介紹了SpringBoot中@RestControllerAdvice注解的使用,@RestControllerAdvice主要用精簡(jiǎn)客戶(hù)端返回異常,它可以捕獲各種異常,需要的朋友可以參考下2024-01-01Java利用Dijkstra和Floyd分別求取圖的最短路徑
本文主要介紹了圖的最短路徑的概念,并分別利用Dijkstra算法和Floyd算法求取最短路徑,最后提供了基于鄰接矩陣和鄰接表的圖對(duì)兩種算法的Java實(shí)現(xiàn)。需要的可以參考一下2022-01-01