概述
本文将介绍如何启用 Spring Boot Actuator 的所有 Endpoints。首先从 maven 依赖开始,而后解说如何通过配置文件来管制 Endpoint(后称作端点)。最初再学习一下如何确保端点的平安。
其中 Spring Boot 1.x 和 Spring Boot 2.x 在 Actuator 的端点配置上会有肯定的区别。当呈现区别时,会进行提醒。
引入依赖
要应用 Spring Boot Actuator 须要先在我的项目中引入对应的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>2.4.3</version>
</dependency>
从 Spring Boot 2.x 开始,如果想通过 HTTP 的形式进行拜访,还须要引入 web starter:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.4.3</version>
</dependency>
启用并裸露端点
从 Spring Boot 2.x 开始,咱们须要手动的去启用和裸露端点。默认状况下,除了 /shutdown 之外的所有端点都是可用的,同时只有 /health 和 /info 端点是对外裸露的。即使咱们为应用程序配置了多个根上下文,所有的端点都能够通过 /actuator 来进行查找。
这意味着,一旦咱们引入了适合的 starter 到 maven 配置中,咱们便能够通过 http://localhost:8080/actuator/health 和 http://localhost:8080/actuator/info 来进行两个端点的拜访。
拜访 http://localhost:8080/actuator,返回可用的端点列表如下:
{"_links":{"self":{"href":"http://localhost:8080/actuator","templated":false},
"health":{"href":"http://localhost:8080/actuator/health","templated":false},
"info":{"href":"http://localhost:8080/actuator/info","templated":false}}}
裸露所有端点
上面通过配置来裸露除了 /shutdown 之外的所有端点,在 application.properties 中进行如下配置:
management.endpoints.web.exposure.include=*
重启,再次拜访 /actuator,能够看到除了 /shutdown 之外的其余所有端点。
{"_links":{"self":{"href":"http://localhost:8080/actuator","templated":false},
"beans":{"href":"http://localhost:8080/actuator/beans","templated":false},
"caches":{"href":"http://localhost:8080/actuator/caches","templated":false},
"health":{"href":"http://localhost:8080/actuator/health","templated":false},
"info":{"href":"http://localhost:8080/actuator/info","templated":false},
"conditions":{"href":"http://localhost:8080/actuator/conditions","templated":false},
"configprops":{"href":"http://localhost:8080/actuator/configprops","templated":false},
"env":{"href":"http://localhost:8080/actuator/env","templated":false},
"loggers":{"href":"http://localhost:8080/actuator/loggers","templated":false},
"heapdump":{"href":"http://localhost:8080/actuator/heapdump","templated":false},
"threaddump":{"href":"http://localhost:8080/actuator/threaddump","templated":false},
"metrics":{"href":"http://localhost:8080/actuator/metrics","templated":false},
"scheduledtasks":{"href":"http://localhost:8080/actuator/scheduledtasks","templated":false},
"mappings":{"href":"http://localhost:8080/actuator/mappings","templated":false}}}
裸露指定端点
一些端点可能会裸露敏感数据,所以咱们须要晓得如何细粒度去裸露端点。
management.endpoints.web.exposure.include 属性能够通过逗号分隔符来配置多个端点,比方咱们裸露 /beans 和 /loggers 端点:
management.endpoints.web.exposure.include=beans, loggers
除了蕴含具体端点之外,咱们还能够排除一些端点。比方裸露除了 /threaddump 之外的所有端点:
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=threaddump
include 和 exclude 属性均反对配置一个端点列表。exclude 属性的优先级要高于 include。
开启指定端点
上面来看一下如何细粒度的开启指定的端点。首先,须要敞开默认开启的所有端点:
management.endpoints.enabled-by-default=false
开启并裸露 /health 端点:
management.endpoint.health.enabled=true
management.endpoints.web.exposure.include=health
通过上述配置,便能够拜访 /health 端点了。
开启 Shutdown 端点
因为 /shutdown 端点比拟敏感的起因,该端点默认是不可用的。可在 application.properties 文件中通过如下配置进行启动:
management.endpoint.shutdown.enabled=true
此时,拜访 /actuator 端点,就能够在列表中看到它了。/shutdown 端点仅接管 POST 申请,能够通过如下形式优雅的敞开服务:
curl -X POST http://localhost:8080/actuator/shutdown
端点的平安
在实在的利用中,咱们通常须要对应用程序进行平安防护。基于此,咱们须要确保 Actuator 端点的平安。
首先,在应用程序中增加 security 的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>2.4.4</version>
</dependency>
为了最根本的平安保障,这是咱们须要做的事。增加 security starter 依赖之后,程序会主动将身份验证利用于除 /info 和 /health 之外的所有公开端点。
上面,自定义 security 以将 /actuator 端点限度为 ADMIN 角色。
首先排除默认的平安配置:
@SpringBootApplication(exclude = {
SecurityAutoConfiguration.class,
ManagementWebSecurityAutoConfiguration.class
})
注意下 ManagementWebSecurityAutoConfiguration.class 类,它会让平安配置利用到 /actuator。
在咱们的配置类中,配置几个用户和角色,同时有一个 ADMIN 的角色能够应用:
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
auth
.inMemoryAuthentication()
.withUser("user")
.password(encoder.encode("password"))
.roles("USER")
.and()
.withUser("admin")
.password(encoder.encode("admin"))
.roles("USER", "ADMIN");
}
SpringBoot 为咱们提供了一个不便的申请匹配器,用于咱们的 Actuator 端点。利用它能够将 /actuator 锁定为 ADMIN 角色:
http.requestMatcher(EndpointRequest.toAnyEndpoint())
.authorizeRequests((requests) -> requests.anyRequest().hasRole("ADMIN"));
小结
通过本文,咱们学习了 Spring Boot 是如何来默认配置 Actuator 的。随后,咱们在应用程序的 application.properties 文件中定义了端点的启用、禁用和裸露。鉴于 Spring Boot 对 /shutdwon 端点的不同解决,咱们学习了如何独自启用该端点。最初,学习了如何基于 security 对端点来进行平安防护。
源码地址:https://github.com/eugenp/tut…。
博主简介:《SpringBoot 技术底细》技术图书作者,热爱钻研技术,写技术干货文章。
公众号:「程序新视界」,博主的公众号,欢送关注~
技术交换:请分割博主微信号:zhuan2quan