0


WebSecurityConfigurerAdapter已弃用

配置数据库自定义的UserDetalisService的身份认证时,发现

WebSecurityConfigurerAdapter

已废弃,在网上查阅了官方的案例文档,再加上自己项目的自定义数据库认证方案,将参考内容整理如下,有问题欢迎大家指正。

在 Spring Security 5.7.0-M2 中,弃用了

WebSecurityConfigurerAdapter

,Spring 鼓励用户转向基于组件的安全配置。

配置

HttpSecurity

在 Spring Security 5.4 中,Spring 引入了通过创建

SecurityFilterChain

bean 来配置

HttpSecurity

的能力。
以下是使用

WebSecurityConfigurerAdapter

的示例配置,该配置使用

HTTP Basic

保护所有站点:(不推荐使用)

@ConfigurationpublicclassSecurityConfigurationextendsWebSecurityConfigurerAdapter{@Overrideprotectedvoidconfigure(HttpSecurity http)throwsException{
        http
            .authorizeHttpRequests((authz)-> authz
                .anyRequest().authenticated()).httpBasic(withDefaults());}}

推荐的方法是注册一个

SecurityFilterChain

bean:

@ConfigurationpublicclassSecurityConfiguration{@BeanpublicSecurityFilterChainfilterChain(HttpSecurity http)throwsException{
        http
            .authorizeHttpRequests((authz)-> authz
                .anyRequest().authenticated()).httpBasic(withDefaults());return http.build();}}

配置

WebSecurity

在 Spring Security 5.4 中,Spring 还引入了

WebSecurityCustomizer

WebSecurityCustomizer

是一个回调接口,可用于自定义

WebSecurity


下面是使用

WebSecurityConfigurerAdapter

的示例配置,它忽略匹配

/ignore1

/ignore2

的请求:(不推荐使用)

@ConfigurationpublicclassSecurityConfigurationextendsWebSecurityConfigurerAdapter{@Overridepublicvoidconfigure(WebSecurity web){
        web.ignoring().antMatchers("/ignore1","/ignore2");}}

推荐的方法是注册一个

WebSecurityCustomizer

bean:

@ConfigurationpublicclassSecurityConfiguration{@BeanpublicWebSecurityCustomizerwebSecurityCustomizer(){return(web)-> web.ignoring().antMatchers("/ignore1","/ignore2");}}

警告:如果将 WebSecurity 配置为忽略请求,请考虑通过 HttpSecurity#authorizeHttpRequests 使用 permitAll。有关其他详细信息,请参阅

configure

Javadoc。

全局认证管理器

要创建可供整个应用程序使用的

AuthenticationManager

,您只需将

AuthenticationManager

注册为

@Bean

@ConfigurationpublicclassSecurityConfiguration{@BeanpublicEmbeddedLdapServerContextSourceFactoryBeancontextSourceFactoryBean(){EmbeddedLdapServerContextSourceFactoryBean contextSourceFactoryBean =EmbeddedLdapServerContextSourceFactoryBean.fromEmbeddedLdapServer();
        contextSourceFactoryBean.setPort(0);return contextSourceFactoryBean;}@BeanAuthenticationManagerldapAuthenticationManager(BaseLdapPathContextSource contextSource){LdapBindAuthenticationManagerFactory factory =newLdapBindAuthenticationManagerFactory(contextSource);
        factory.setUserDnPatterns("uid={0},ou=people");
        factory.setUserDetailsContextMapper(newPersonContextMapper());return factory.createAuthenticationManager();}}

本地身份验证管理器

在 Spring Security 5.6 中,Spring 引入了 HttpSecurity#authenticationManager 方法,它覆盖了特定

SecurityFilterChain

的默认

AuthenticationManager


下面是一个将自定义

AuthenticationManager

设置为默认值的示例配置:

@ConfigurationpublicclassSecurityConfiguration{@BeanpublicSecurityFilterChainfilterChain(HttpSecurity http)throwsException{
        http
            .authorizeHttpRequests((authz)-> authz
                .anyRequest().authenticated()).httpBasic(withDefaults()).authenticationManager(newCustomAuthenticationManager());return http.build();}}

基于数据库自定义UserDetailsService

这是自己使用的基于数据库与JWT的认证方案。

以下是使用

WebSecurityConfigurerAdapter

的示例配置,该配置使用

HTTP Basic

保护所有站点:(不推荐使用)

@ConfigurationpublicclassWebSecurityConfigextendsWebSecurityConfigurerAdapter{@BeanpublicBCryptPasswordEncoderpasswordEncoder(){returnnewBCryptPasswordEncoder();}@Overrideprotectedvoidconfigure(AuthenticationManagerBuilder auth)throwsException{
        auth.userDetailsService(userServiceImpl);}@Overridepublicvoidconfigure(HttpSecurity httpSecurity)throwsException{//Configuring HttpSecurity
        ···
    }}

推荐的方法是注册一个

SecurityFilterChain

bean:

@ConfigurationpublicclassSecurityConfig{@BeanpublicBCryptPasswordEncoderpasswordEncoder(){returnnewBCryptPasswordEncoder();}@BeanAuthenticationManagerauthenticationManager(HttpSecurity httpSecurity)throwsException{AuthenticationManager authenticationManager = httpSecurity.getSharedObject(AuthenticationManagerBuilder.class).userDetailsService(userServiceImpl).passwordEncoder(passwordEncoder()).and().build();return authenticationManager;}@BeanpublicSecurityFilterChainsecurityFilterChain(AuthenticationManager authenticationManager,HttpSecurity httpSecurity)throwsException{//Configuring HttpSecurity
        ···
    }}

**

如果想了解基于数据库的自定义UserDetailsService的JWT方法,可以移步另一篇文章 基于数据库自定义UserDetailsService实现JWT认证

**

参考网页

  1. 基于数据库的SpringSecurity配置
  2. Spring Security without the WebSecurityConfigurerAdapter
标签: spring java spring boot

本文转载自: https://blog.csdn.net/lazy_LYF/article/details/127284459
版权归原作者 lazy_LYF 所有, 如有侵权,请联系我们删除。

“WebSecurityConfigurerAdapter已弃用”的评论:

还没有评论