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