如何在 Spring Boot 中禁用 Actuator 端点安全?

简介: 如何在 Spring Boot 中禁用 Actuator 端点安全?

Spring Boot Actuator 是一个非常有用的模块,它提供了许多生产就绪的功能,如健康检查、度量指标、审计等。默认情况下,Actuator 的某些端点是受保护的,需要身份验证才能访问。然而,在某些开发或测试环境中,你可能希望禁用这些端点的安全性,以便更方便地进行调试和测试。本文将详细介绍如何在 Spring Boot 中禁用 Actuator 端点的安全性。

1. 什么是 Spring Boot Actuator?

Spring Boot Actuator 是 Spring Boot 的一个子项目,旨在帮助开发者监控和管理其应用程序。它提供了许多生产就绪的功能,如:

  • 健康检查:检查应用程序的健康状态。
  • 度量指标:收集应用程序的性能数据。
  • 审计:记录应用程序的操作日志。
  • 环境属性:查看应用程序的配置属性。
  • HTTP 跟踪:记录 HTTP 请求和响应。
  • 日志级别:动态调整日志级别。

这些功能通过一系列的端点(Endpoints)来实现。端点可以通过 HTTP 或 JMX 访问。

2. 默认的安全设置

为了保护敏感信息,Spring Boot Actuator 默认启用了安全性。这意味着大多数端点都需要身份验证才能访问。默认情况下,只有 health 和 info 端点是公开的,其他端点则需要通过 Spring Security 进行身份验证。

3. 禁用 Actuator 端点安全

在开发或测试环境中,你可能希望禁用 Actuator 端点的安全性,以便更容易地进行调试和测试。以下是如何禁用 Actuator 端点安全的详细步骤。

3.1 添加依赖

首先,确保你的 pom.xml(Maven)或 build.gradle(Gradle)文件中包含 Spring Boot Actuator 的依赖。

Maven:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Gradle:

implementation 'org.springframework.boot:spring-boot-starter-actuator'
3.2 配置 application.properties 或 application.yml

在 application.properties 或 application.yml 文件中,添加以下配置来禁用 Actuator 端点的安全性。

application.properties:

# 禁用所有端点的安全性
management.endpoints.web.exposure.include=*

# 禁用 Spring Security 对 Actuator 端点的保护
management.endpoint.health.show-details=always

application.yml:

management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: always
3.3 配置 Spring Security(如果使用)

如果你的应用程序中使用了 Spring Security,还需要进一步配置以确保 Actuator 端点不受保护。在 SecurityConfig 类中,添加以下配置:

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
   

    @Override
    protected void configure(HttpSecurity http) throws Exception {
   
        http
            .authorizeRequests()
            .antMatchers("/actuator/**").permitAll() // 允许访问所有 Actuator 端点
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .and()
            .httpBasic();
    }
}
3.4 重启应用程序

完成上述配置后,重启你的 Spring Boot 应用程序。现在,所有的 Actuator 端点都应该可以无需身份验证直接访问。

4. 验证端点

打开浏览器或使用 curl 命令,访问 Actuator 端点以验证配置是否生效。

例如,访问 health 端点:

curl http://localhost:8080/actuator/health

你应该会看到类似以下的 JSON 响应:

{
   
  "status": "UP",
  "components": {
   
    "diskSpace": {
   
      "status": "UP",
      "details": {
   
        "total": 250790436864,
        "free": 202077614080,
        "threshold": 10485760
      }
    },
    "ping": {
   
      "status": "UP"
    }
  }
}

5. 注意事项

虽然禁用 Actuator 端点的安全性在开发和测试环境中非常方便,但在生产环境中这样做可能会带来严重的安全风险。因此,强烈建议在生产环境中启用 Actuator 端点的安全性,并使用适当的身份验证和授权机制来保护这些端点。

结论

通过本文,你已经学会了如何在 Spring Boot 中禁用 Actuator 端点的安全性。这对于开发和测试环境中的调试和测试非常有用。然而,请务必在生产环境中重新启用这些安全性措施,以确保应用程序的安全性。希望本文能帮助你在实际项目中更好地利用 Spring Boot Actuator。

相关文章
|
监控 安全 Java
Spring Boot 中的 Actuator 是什么?
Spring Boot 中的 Actuator 是什么?
3518 6
|
安全 Java 对象存储
安全性考量:Spring Security与Netflix OSS在微服务安全中的作用
安全性考量:Spring Security与Netflix OSS在微服务安全中的作用
392 1
|
Java Spring 监控
Spring Boot Actuator:守护你的应用心跳,让监控变得触手可及!
【8月更文挑战第31天】Spring Boot Actuator 是 Spring Boot 框架的核心模块之一,提供了生产就绪的特性,用于监控和管理 Spring Boot 应用程序。通过 Actuator,开发者可以轻松访问应用内部状态、执行健康检查、收集度量指标等。启用 Actuator 需在 `pom.xml` 中添加 `spring-boot-starter-actuator` 依赖,并通过配置文件调整端点暴露和安全性。Actuator 还支持与外部监控工具(如 Prometheus)集成,实现全面的应用性能监控。正确配置 Actuator 可显著提升应用的稳定性和安全性。
1029 1
|
监控 数据可视化 Java
springBoot:actuator&admin 图形可视化&spring 打包 (七)
本文介绍了Spring Boot Actuator及其图形化管理界面Spring Boot Admin的使用方法,包括依赖导入、服务端与客户端配置、以及如何打包为JAR和WAR文件并部署。通过这些步骤,可以实现应用的监控和管理功能。
913 0
|
测试技术 Java Spring
Spring 框架中的测试之道:揭秘单元测试与集成测试的双重保障,你的应用真的安全了吗?
【8月更文挑战第31天】本文以问答形式深入探讨了Spring框架中的测试策略,包括单元测试与集成测试的有效编写方法,及其对提升代码质量和可靠性的重要性。通过具体示例,展示了如何使用`@MockBean`、`@SpringBootTest`等注解来进行服务和控制器的测试,同时介绍了Spring Boot提供的测试工具,如`@DataJpaTest`,以简化数据库测试流程。合理运用这些测试策略和工具,将助力开发者构建更为稳健的软件系统。
379 0
|
存储 安全 Java
|
安全 Java 开发者
深入实践springboot实战 蓄势待发 我不是雷锋 我是知识搬运工
springboot,说白了就是一个集合了功能的大类库,包括springMVC,spring,spring data,spring security等等,并且提供了很多和可以和其他常用框架,插件完美整合的接口(只能说是一些常用框架,基本在github上能排上名次的都有完美整合,但如果是自己写的一个框架就无法实现快速整合)。
|
Java 数据安全/隐私保护
Neo4j【付诸实践 01】SpringBoot集成报错org.neo4j.driver.exceptions.ClientException:服务器不支持此驱动程序支持的任何协议版本(解决+源代码)
Neo4j【付诸实践 01】SpringBoot集成报错org.neo4j.driver.exceptions.ClientException:服务器不支持此驱动程序支持的任何协议版本(解决+源代码)
1035 1
|
缓存 Java Maven
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
898 1