当前位置: 首页 > 知识库问答 >
问题:

如何配置“健康”执行器endpoint以使用令牌身份验证?

陆子航
2023-03-14

我们正在Spring Boot2应用程序中使用基于令牌的身份验证(带有Spring Security)。现在我介绍Spring引导执行器到它。我想配置/healtendpoint,使其在没有任何权限的情况下可见,但仅在经过授权后才显示健康检查详细信息。

我找到了management.endpoint.health.show-details=when_authorized属性,该属性应该很有帮助,但现在我正在与Spring Security配置作斗争,以便让每个人都能看到:

{
  "status": "UP"
}

/acture/healt下,使用令牌授权的用户应看到:

{
  "status": "UP",
  "details": { ... }
}

你也面临过类似的问题吗?你是怎么处理的?

共有1个答案

常献
2023-03-14

好了,现在我明白了,如果您关闭应用程序中的安全性,并保留management.endpoint.health.show-details=when_authorized字段,那么您得到的只是status字段?如果我是对的,这不是一个问题,看看springHealthWebEndpointResponseMapper中的Map方法。我发现这个方法会覆盖(从响应中删除details字段)if中的条件为true:

public WebEndpointResponse<Health> map(Health health, SecurityContext securityContext,
        ShowDetails showDetails) {
    if (showDetails == ShowDetails.NEVER
            || (showDetails == ShowDetails.WHEN_AUTHORIZED
                    && (securityContext.getPrincipal() == null
                            || !isUserInRole(securityContext)))) {
        health = Health.status(health.getStatus()).build();
    }
    Integer status = this.statusHttpMapper.mapStatus(health.getStatus());
    return new WebEndpointResponse<>(health, status);
}

在您的例子中,我猜您已经将上面提到的属性设置为when_authorized并且您已经关闭了身份验证,因此主体为NULL。不确定我是不是对,但我希望我给了你一个线索。:)

 类似资料:
  • 我们已经看到了一些与Spring Boot的1.5+版本的健康执行器endpoint相关的问题。经历了其中的一些,我们仍然不知所措。 我们的目标是: 要利用Spring Boot/Spring security对安全筛选器链接的自动配置(即不必完全实现/配置) 启用安全的运行状况访问(查看应用程序的运行状况信息的完整视图) 启用不安全的运行状况访问(允许endpoint在Kubernetes中充当

  • 我正在将一个项目从Spring Boot1.x迁移到Spring Boot2.x。唯一剩下的,给我带来麻烦的是Spring引导执行器。 现在我使用了执行器库的较新版本,我不再接收那些附加信息(在提供凭据时)。我只看到: 一开始我想也许我没有正确设置凭据,但通过故意提供无效凭据,我得到了401未经授权。所以不可能是身份验证。 有什么建议吗?

  • {“Status”:“Down”} 我需要做什么才能显示自定义健康状况指示器?

  • 我正在使用SpringBoot执行器返回应用程序的运行状况。 我看到了下面的回复 我想返回一个类似于下面的响应 有办法做到吗?

  • 但我想要一些我可以调用从AWS弹性负载均衡器/自动缩放组。默认情况下,如果一个实例未通过健康检查,ELB/ASG将终止它并用一个新的实例替换它。问题是一些健康检查,如DataSourceHealthIndicator,会在数据库关闭时向下报告,但我的应用程序实例在其他方面是完全健康的。如果我使用默认行为,AWS将抛出完全正常的实例,直到数据库重新启动,这将导致我的账单增加。 我可以去掉DataSo

  • 我想做的事 使用Spring Boot执行器创建两个(不同)endpoint 我的环境 null 要实现健康检查特性,我想使用Spring Boot执行器是最快的方法(默认情况下,/health映射到健康检查endpoint)。我还理解我们可以通过扩展AbstractHealthIndicator来配置这个endpoint(这样它将包括DB健康检查)。 但就我所见,我无法找到一种方法来创建多个en