Spring Boot实例停止时未从Spring Boot Admin注销的Spring Boot客户端

时间:2019-04-16 03:01:58

标签: spring-boot pivotal-cloud-foundry spring-boot-admin

我们有Spring Boot Admin版本2.0.3和相应的客户端版本。

我们的Spring Boot实例已部署到Pivotal Cloud Foundry。

一切正常,直到我们部署新版本的Spring Boot实例。将为该实例生成一个新的内部URL,并将其注册到admin。但是它并没有从管理员注销已删除的实例。

因此它使spring boot admin处于不一致状态。例如:

enter image description here

在尝试重试注册实例后,如何使其自身注销。

我尝试设置:

spring.boot.admin.client.auto-deregistration = true

但是它并没有达到预期的效果。

1 个答案:

答案 0 :(得分:0)

设置auto-deregistration=true使您的客户端应用程序向端点/instances/{id}上的服务器发送http删除调用。服务器上也必须为此端点禁用CSRF检查。 Spring Boot管理文档中的示例安全性配置中缺少此配置。 (请参见https://github.com/codecentric/spring-boot-admin/issues/1251
要解决此问题,请替换

.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.ignoringAntMatchers(adminContextPath + "/instances", adminContextPath + "/actuator/**");

使用

.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.ignoringRequestMatchers(
    new AntPathRequestMatcher(adminContextPath + "/instances", HttpMethod.POST.toString()),
    new AntPathRequestMatcher(adminContextPath + "/instances/*", HttpMethod.DELETE.toString()),
    new AntPathRequestMatcher(adminContextPath + "/actuator/**")
);