我在将 Spring Boot 从 1.1.12 升级到 1.2.5 时遇到问题,但在 1.2.x 的所有版本中都有相同的问题。Actuator 提供的/health
端点现在将 401 Unauthorized 返回到曾经有效的集成测试。升级依赖项时没有更改任何代码。
这是测试用例:
@Test
public void testNoUserForStatusEndpoint() throws Exception {
HttpEntity<String> entity = new HttpEntity<>(null, headers);
ResponseEntity<String> response = template
.exchange(base + "/health", HttpMethod.GET, entity, String.class);
assertEquals(HttpStatus.OK, response.getStatusCode());
assertEquals("{\"status\":\"UP\"}", response.getBody());
}
我希望看到基本"UP"
状态,但没有更多详细信息,因为用户是匿名的且未经过身份验证。
application.properties 中的设置management.security.enabled=false
会导致端点返回完整的健康信息。这是不可取的。
设置endpoints.health.sensitive=false
什么都不做。
安全配置没有改变。它基于 Apache 终止和证书白名单,这也没有改变。
@Override
public void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.addFilterBefore(new CustomAuthenticationFilter(authenticationManager(), Environment.getUserWhitelist()), BasicAuthenticationFilter.class);
}
我怎样才能使测试通过?
更新:
最初定义的唯一相关设置application.properties
是endpoints.health.enabled=true
.
添加management.health.status.order=UP,DOWN,OUT_OF_SERVICE,UNKNOWN
到application.properties
没有区别。
使用所有三个属性会导致 401(不起作用):
endpoints.health.enabled=true
endpoints.health.sensitive=false
management.health.status.order=UP,DOWN,OUT_OF_SERVICE,UNKNOWN
主类只是一个精简的 Spring Boot 应用程序启动器:
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
我已经尝试添加http.authorizeRequests().antMatchers("/health**").permitAll();
到上面详述的安全配置方法的第一行。这并没有什么不同。
根据 Spring Boot issue 2120,使endpoints.health.sensitive
用自定义安全性时忽略该属性。我发现文档中没有提到这一点。