2

我在将 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.propertiesendpoints.health.enabled=true.

添加management.health.status.order=UP,DOWN,OUT_OF_SERVICE,UNKNOWNapplication.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​​用自定义安全性时忽略该属性。我发现文档中没有提到这一点。

4

4 回答 4

4

或者添加management.security.enabled=false 到 application.properties

于 2017-06-25T17:50:16.583 回答
2

我找到了解决方案。

添加@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)到我的自定义身份验证过滤器(在问题中称为CustomAuthenticationFilter)会更改定义安全过滤器 bean 的语义。

如果没有注释,Spring Boot 假定我想覆盖所有过滤器并单独使用我的自定义过滤器。

使用注释,Spring Boot 将我的过滤器添加到预定义过滤器列表中。这允许/health端点再次工作。

有关详细信息,请参阅GitHub 上的Spring Boot 问题 2120

于 2015-09-23T13:52:31.900 回答
1

/health url 出现 404 错误。然而,它使用 /actuator/health url 而不是 /health。

于 2018-09-27T00:31:46.200 回答
0

请在 application.properties 或 application.yml 上试试这个:-

management.health.status.order=UP,DOWN,OUT_OF_SERVICE,UNKNOWN
于 2015-09-17T11:34:07.027 回答