Spring boot actuator:当其他执行器的端点受到保护时,健康端点未显示详细信息

Posted

技术标签:

【中文标题】Spring boot actuator:当其他执行器的端点受到保护时,健康端点未显示详细信息【英文标题】:Spring boot actuator: Health endpoint not showing details when other actuator's endpoints are secured 【发布时间】:2019-11-12 07:17:38 【问题描述】:

目标:保护所有执行器端点,除了信息和健康,但在用户通过身份验证时显示详细信息。

我的 pom 只有spring-boot-starter-webspring-boot-starter-securityspring-boot-starter-web(Spring boot 版本:2.1.6.RELEASE),整个配置是

@Configuration
public class ActuatorSecurity extends WebSecurityConfigurerAdapter 

  @Override
  protected void configure(HttpSecurity http) throws Exception 
    http.requestMatcher(EndpointRequest.toAnyEndpoint().excluding("info", "health"))
        .authorizeRequests()
        .anyRequest().authenticated()
        .and()
        .httpBasic();
  

application.yml

management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: "when-authorized"

这可以保护所有端点并提供未经身份验证的信息和健康访问权限。但是,当使用凭据访问运行状况时,它不会返回详细信息。在这种情况下,management.endpoint.health.show-details="when-authorized" 似乎被忽略了。

有人知道如何解决这个问题吗?

【问题讨论】:

.requestMatchers(EndpointRequest.to("health","info")).permitAll() 应该可以工作 【参考方案1】:

应该使用

 protected void configure(HttpSecurity http) throws Exception 
    http.authorizeRequests()
        .requestMatchers(EndpointRequest.toAnyEndpoint()
        .excluding("info", "health")).authenticated()
        .and().httpBasic();
  

 protected void configure(HttpSecurity http) throws Exception 
    http.authorizeRequests()
        .requestMatchers(EndpointRequest.to("info", "health"))
        .permitAll()
        .anyRequest().authenticated()
        .and().httpBasic();
  

【讨论】:

经过测试和工作:so-actuator

以上是关于Spring boot actuator:当其他执行器的端点受到保护时,健康端点未显示详细信息的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot Actuator 不读取 git.properties

如何启用Spring Boot Actuator的所有Endpoints

如何启用Spring Boot Actuator的所有Endpoints

如何启用Spring Boot Actuator的所有Endpoints

为啥 Spring Boot Actuator 返回 404 而不是 401?

Spring Boot 2 Actuator Httptrace 主体为空