升级到Boot 1.2

时间:2015-09-17 11:01:23

标签: java spring-boot-actuator

我无法将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属性。我在文档中没有提到这一点。

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

我找到了解决方案。

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

如果没有注释,Spring Boot会假设我要覆盖所有过滤器,并且只是单独使用我的自定义过滤器。

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

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

答案 2 :(得分:0)

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

management.health.status.order=UP,DOWN,OUT_OF_SERVICE,UNKNOWN

答案 3 :(得分:0)

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