如何解决Spring Boot中切换至HttpSecurity Lambda DSL语法的提示?
解决Spring Security中"Consider switching to 'HttpSecurity' Lambda DSL syntax"提示的方案
这个提示是Spring Security 5.2+版本开始推荐使用Lambda DSL语法替代传统链式配置的提醒,Lambda DSL能让配置代码更简洁连贯,避免重复调用HttpSecurity方法和繁琐的.and()拼接。
修改后的完整配置代码如下:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; @Configuration @EnableWebSecurity public class SecurityConfiguration { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http // 禁用CSRF保护 .csrf(csrf -> csrf.disable()) // 配置HTTP Basic认证的自定义入口点 .httpBasic(basic -> basic.authenticationEntryPoint(new AuthEntryPoint())) // 配置请求权限规则 .authorizeHttpRequests(auth -> auth .requestMatchers(HttpMethod.POST, "/api/1.0/auth").authenticated() .anyRequest().permitAll() ) // 设置会话为无状态模式 .sessionManagement(session -> session .sessionCreationPolicy(SessionCreationPolicy.STATELESS) ); return http.build(); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } }
关键修改点说明:
- 将原来分散的
http.csrf().disable()改为csrf(csrf -> csrf.disable()),用Lambda表达式嵌套配置子项 httpBasic的配置直接通过Lambda传入,省去单独调用http.httpBasic()的写法authorizeHttpRequests直接在Lambda中完成所有权限规则配置,不需要再用.and()拼接多个authorizeHttpRequests调用sessionManagement同样用Lambda嵌套配置会话策略,结构更清晰
这种写法完全保留了原配置的功能,同时符合Spring Security官方推荐的配置风格,消除了提示信息。
内容的提问来源于stack exchange,提问作者Burak Demirer
相关产品推荐
相关产品推荐

