Новые возможности Spring Security Использование Lambda DSL

Java

Обзор лямбда-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) имеют схожие методы настройки.image