Обзор лямбда-DSL
Улучшения Spring Security 5.2 для синтаксиса Lambda DSL, позволяющие настраивать лямбдаHttpSecurity
,ServerHttpSecurity
Важное напоминание: предыдущий метод настройки по-прежнему работает. Добавление лямбда-выражений предназначено для обеспечения большей гибкости, но их использование не является обязательным. Давайте взглянемHttpSecurity
Конфигурация лямбда сравнивается с предыдущим стилем конфигурации.
HttpSecurity
Настроить с помощью лямбда-выражений
@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());
}
}
Эквивалентная конфигурация без лямбды
@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();
}
}
Дефолт
Советы по настройке Lambda DSL При сравнении двух приведенных выше примеров вы заметите некоторые ключевые различия:
В Lambda DSL нет необходимости использовать.and()
Параметры конфигурации цепочки методов.HttpSecurity
перечислитьLambda
После метода экземпляр автоматически возвращается для дальнейшей настройки.
Spring Security WebFlux
@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();
}
}
Суммировать
Автоматический отступ Spring SecurityLambda DSL делает конфигурацию более читаемой, избавляя от необходимости использовать цепочку параметров конфигурации .and().Spring Security DSL
с другимSpring DSL
(например, Spring Integration и Spring Cloud Gateway) имеют схожие методы настройки.