我有一个正在运行的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
答案 0 :(得分:0)
我通过分离解决了这个问题 @ManagementContextConfiguration 和 @EnableWebSecurity 放入2个不同的文件。