我有一个有效的Spring Boot 1.x应用程序,配置了不同的管理端口和安全性(Basic Auth)。迁移到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
我已经解决了这个问题,将@ManagementContextConfiguration和@EnableWebSecurity分成2个不同的文件。