【问题标题】:How to migrate from WebSecurityConfigurerAdapter to SecurityFilterChain when using Azure Active Directory使用 Azure Active Directory 时如何从 WebSecurityConfigurerAdapter 迁移到 SecurityFilterChain
【发布时间】:2022-11-25 08:11:37
【问题描述】:

WebSecurityConfigurerAdapter 已弃用,我正在尝试迁移到 SecurityFilterChain。所需的代码更改真的很少。但问题是我在我的 spring boot 项目中使用了 azure active directory:

<dependency>
  <groupId>com.azure.spring</groupId>
  <artifactId>spring-cloud-azure-starter-active-directory</artifactId>      
</dependency>
<dependency>
  <groupId>com.azure.spring</groupId>
  <artifactId>spring-cloud-azure-dependencies</artifactId>
  <version>4.4.1</version>
  <type>pom</type>
  <scope>import</scope>
</dependency>

Azure 依赖项似乎仍在以下类中使用 WebSecurityConfigurerAdapter

AadResourceServerWebSecurityConfigurerAdapter
AadWebSecurityConfigurerAdapter
AadResourceServerConfiguration
AadWebApplicationConfiguration

结果,我在启动应用程序时收到以下错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springSecurityFilterChain' defined in class path resource .....

在堆栈跟踪中向下:

Caused by: java.lang.IllegalStateException: Found WebSecurityConfigurerAdapter as well as SecurityFilterChain. Please select just one.

似乎还没有针对 Azure 活动目录依赖项的更新。使用 Azure AD 时有没有办法使用 SecurityFilterChain?

【问题讨论】:

    标签: java spring-boot azure spring-security azure-active-directory


    【解决方案1】:

    我找到了解决方案。我不得不在我的主应用程序类中排除 AadAutoConfiguration 类:

    @SpringBootApplication(exclude = AadAutoConfiguration.class)
    public class DemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    }
    

    然后定义一个自定义的:

    @Configuration(proxyBeanMethods = false)
    @Import({AadPropertiesConfiguration.class})
    public class AadAutoConfiguration {
    
      @Bean
      @ConditionalOnMissingBean(JwtDecoder.class)
      public JwtDecoder jwtDecoder(
          RestTemplateBuilder restTemplateBuilder,
          AadAuthenticationProperties aadAuthenticationProperties) {
        AadResourceServerConfiguration configuration =
            new AadResourceServerConfiguration(restTemplateBuilder);
        return configuration.jwtDecoder(aadAuthenticationProperties);
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-08-12
      • 2022-01-09
      • 2019-12-20
      • 1970-01-01
      • 2023-02-22
      • 2018-10-08
      • 2020-12-12
      • 2012-04-13
      • 1970-01-01
      相关资源
      最近更新 更多