WebManageConfigurerAdapter的@ManagementContextConfiguration用法不起作用

时间:2019-03-13 17:26:30

标签: spring-security spring-boot-actuator

我有一个正在运行的Spring Boot 1.x应用程序,该应用程序配置了不同的管理端口和安全性(基本身份验证)。 迁移到Spring 2.1后,它不再起作用。

查看代码:

@ManagementContextConfiguration   公共类ManagementConfig {

@EnableWebSecurity
@Order(SecurityProperties.BASIC_AUTH_ORDER)
static class SecurityConfig extends WebSecurityConfigurerAdapter {

  public SecurityConfig() {
    super(true);  // disable defaults
  }

  @Override
  protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
        auth.inMemoryAuthentication()
          .withUser("admin")
          .password(encoder.encode("admin"))
          .roles(Collections.emptyList().toArray(new String[]{}));
  }

  @Override
  protected void configure(HttpSecurity http) throws Exception {
      RequestMatcher matcher = new AntPathRequestMatcher("/**");

      http
        .authorizeRequests()
          .requestMatchers(matcher).authenticated();
    }
  }
}

我的spring.factories包含

org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration=\
  com.test.config.ManagementConfig

在乞讨期间,我可以看到创建了SecurityConfig实例,但是没有调用configure()方法(如我所见,在创建ManagementConfig之后,Spring Boot 1.x中有一个后处理器调用。)。

我的application.yml包含:

management.server:
  address: localhost
  port: 18543
  security: 
    enabled: true

问题在于,我现在可以简单地访问任何管理端点

curl http://localhost:18543/info

1 个答案:

答案 0 :(得分:0)

我通过分离解决了这个问题 @ManagementContextConfiguration 和 @EnableWebSecurity 放入2个不同的文件。