spring-security 在Spring Security 5.7.0中使用身份验证提供程序而不使用WebSecurityConfigurerAdapter

pkwftd7m  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(180)

现在我正在尝试为我的spring Boot spring安全项目实现spring security身份验证提供程序。因此,以前我们能够在我们的安全配置文件中扩展WebSecurityConfigurerAdapter,以通过覆盖configure来自定义http和HttpSecurity http以及AuthenticationManagerBuilder auth
但是现在(SpringSecurity5.7.0)WebSecurityConfigurerAdapter被弃用了,我使用WebSecurityCustomizer方法,如下所示:

@EnableWebSecurity
@Configuration
public class SecurityConfig{

 @Bean
    public WebSecurityCustomizer webSecurityCustomizer() {
        return (web) -> web.ignoring()
                .antMatchers("/users/getUser");
    }

}

那么,在使用WebSecurityCustomizer时,我如何在我的REST API中使用身份验证提供程序功能?有人能指导我解决这个问题吗?或者请推荐更新的文档供参考?

3yhwsihp

3yhwsihp1#

我不认为WebSecurityCustomizer是本例中要使用的bean。我猜您要做的是配置一个SecurityFilterChain,如下所示:

@Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests((authz) -> authz
                .anyRequest().authenticated()
            )
            .httpBasic(withDefaults());
        return http.build();
    }

无论如何,不建议在某个端点上禁用Spring Security,如果您不希望在该端点上使用安全性,另一种选择是使用authorizeHttpRequests.antMatchers("/my-endpoint").permitAll()
关于AuthenticationProviderAuthenticationManagerthis link可以帮助您解决您可能遇到的问题。

全局AuthenticationManager要创建可用于整个应用程序的AuthenticationManager,只需将AuthenticationManager注册为@Bean即可。
本地验证管理器在Spring Security 5.6中,我们引入了方法HttpSecurity#authenticationManager,该方法会覆盖特定SecurityFilterChain的默认验证管理器。下面是一个示例配置,它将自定义的验证管理器设置为默认值:

@Configuration
public class SecurityConfiguration {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests((authz) -> authz
                .anyRequest().authenticated()
            )
            .httpBasic(withDefaults())
            .authenticationManager(new CustomAuthenticationManager());
        return http.build();
    }

}

相关问题