1000字彻底搞懂SpringBootActuator组件!

Spring Boot Actuator组件

Spring Boot Actuator通过HTTP endpoints或者JMX来管理和监控Spring Boot应用,如服务的审计、健康检查、指标统计和HTTP追踪等。

Spring Boot Actuator同时还可以与AppOptics、Datadog、Elastic、Influx、Prometheus等第三方监控系统进行整合。完善的监控系统可以使业务系统更健壮。本节主要介绍Spring Boot Actuator的相关知识与实践应用。

Endpoints组件简介

Spring Boot Actuator Endpoints可以让开发者监控或者动态地改变应用。Spring Boot Actuator内置了一系列的端点,也可以自定义端点。默认情况下,Spring Boot Actuator暴露了health和info两个端点。例如,访问health端点可以进行应用健康状态查询,如果应用健康,则返回UP,如果不健康,则返回DOWN。通常情况下使用HTTP的方式访问端点信息,默认的访问路径是/actuator。如果访问health端点,则使用/actuator/health即可。如表8.1所示为Spring Boot提供的一些端点。

表8.1 Spring Boot提供的端点

如果程序是Web应用,还可以使用下面的端点,如表8.2所示。

表8.2 Web应用可以使用的端点

默认情况下,除了shutdown端点之外,其他端点都是启用的。如果想要启用shutdown端点,可以通过配置management.endpoint.<id>.enabled属性来实现。具体配置如下:

management:

endpoint:

shutdown:

enabled: true

如果想要禁用默认的端点,而只开启自己想要的端点,可以使用下面的配置:

management:

endpoints:

enabled-by-default: false

endpoint:

info:

enabled: true

基于HTTP的方式默认暴露了health和info端点。如果想要暴露更多的端点,需要使用下面的配置:

management:

endpoints:

web:

exposure:

include: "*"

exclude: "env,beans"

Spring Boot Actuator端点的默认访问路径是/actuator,如果想要修改该路径,需要进行如下配置:

management:

endpoints:

web:

base-path: "/"

path-mapping:

health: "healthcheck"

同样可以修改访问的端口,配置信息如下:

management:

server:

port: 8081

如果想要修改端点的属性配置,可以进行如下修改:

management:

endpoint:

health:

show-details: always

自定义端点

除了Spring Boot Actuator提供的通用端点之外,开发中还可以自定义端点。Spring Boot提供了@Endpoint注解,带有@Endpoint注解的Bean即为自定义端点。@Jmx-Endpoint和@WebEndpoint 注解可分别通过JMX或者HTTP方式进行访问。

自定义端点提供了方法注解@ReadOperation、@WriteOperation和@Delete-Operation,分别对应HTTP访问方法的GET、POST和DELETE。

下面自定义一个简单的端点,代码如下:

//自定义端点

@WebEndpoint(id="userEndpoint")

@Component

public class UserEndpoint {

@ReadOperation

public String readUserEndpoint(){

return "test read userEndpoint!";

}

@WriteOperation

public String writeUserEndpoint(){

return "test write userEndpoint!";

}

@DeleteOperation

public String deleteUserEndpoint(){

return "test delete userEndpoint!";

}

}

定义好端点Bean之后,需要暴露这个端点,配置信息如下:

management:

endpoints:

web:

exposure:

include: userEndpoint

访问
http://localhost:8080/actuator即可看到userEndpoint端点已经暴露出来了。分别用GET、POST和DELETE方式访问http://localhost:8080/actuator/userEndpoint,将返回不同的信息。

### Spring Boot Actuator 安全漏洞及其修复方案 Spring Boot Actuator 提供了一系列生产就绪的功能,用于监控和管理应用程序。然而,在某些情况下,这些功能可能会引入安全隐患。 #### 漏洞概述 一些版本中的 Spring Boot Actuator 存在未授权访问的风险,攻击者可能通过特定端点获取敏感信息或执行恶意操作[^1]。例如,默认配置下的一些敏感端点(如 `/env` 或 `/metrics`),如果暴露在外网环境中而缺乏适当的身份验证机制,则容易成为攻击目标。 #### 修复措施 为了防止上述提到的安全风险,建议采取以下几种方式加强防护: - **启用身份验证** 对于所有敏感的操作端点应实施基于 HTTP Basic Auth 的认证或者其他更强大的鉴权手段,确保只有经过授权的人才能访问它们。 ```yaml management: endpoints: web: exposure: include: "*" endpoint: health: show-details: when_authorized security: user: name: admin password: ${random.value} ``` - **限制端口绑定范围** 仅允许来自内部网络的请求到达 actuator 端点所在的地址;可以通过设置 `server.address` 属性指定监听 IP 地址,并结合防火墙策略进一步缩小可触及范围。 ```properties server.port=8080 server.address=127.0.0.1 ``` - **移除不必要的敏感端点** 根据实际需求决定哪些端点真正需要开启并对外提供服务,关闭那些不必要开放给外部用户的接口可以有效减少潜在威胁面。 ```java @Configuration public class ManagementEndpointConfig { @Bean public EndpointManagementProperties management() { return new EndpointManagementProperties(); } static class EndpointManagementProperties extends AbstractEndpointProperties<EndpointManagementProperties> { private Set<String> exposedEndpoints = Collections.singleton("health"); // getter and setter omitted... } } ``` - **定期更新依赖库** 及时跟踪官方发布的安全公告以及社区反馈的信息,尽快应用最新的补丁程序来修补已知缺陷,保持系统的安全性处于最佳状态。 以上就是针对 Spring Boot Actuator 可能存在的安全问题所提出的预防性和响应性的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值