解决 Spring Boot Actuator 403 错误的方法

[GET] "/actuator/globalinfo": 403 表示您尝试访问 Spring Boot Actuator 的 /actuator/globalinfo 端点时被服务器拒绝访问(HTTP 状态码 403 Forbidden)。这是一个典型的权限问题,表明您没有足够的权限访问该端点。

403 错误的原因分析

403 错误表示服务器理解了您的请求,但拒绝执行它。在 Spring Boot Actuator 的上下文中,这通常是由于以下原因之一:

  1. 未授权访问:Actuator 端点默认需要授权才能访问

  2. 缺少必要的角色或权限:您可能没有配置正确的用户角色来访问该端点

  3. 端点未暴露:该端点可能没有被包含在暴露的端点列表中

  4. IP 限制:服务器可能限制了特定 IP 地址访问这些端点

解决方案

1. 添加 Spring Security 依赖

首先确保您的项目中包含了 Spring Security 依赖,这是保护 Actuator 端点的前提条件。

对于 Maven 项目:

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

对于 Gradle 项目:

implementation 'org.springframework.boot:spring-boot-starter-security'

2. 配置 Spring Security 权限

创建一个安全配置类来控制 Actuator 端点的访问权限:

import org.springframework.context.annotation.Bean;
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/**").hasRole("ACTUATOR")
                .anyRequest().authenticated()
                .and()
            .httpBasic();
    }
}

3. 配置 Actuator 端点的角色要求

application.propertiesapplication.yml 中配置端点的角色要求:

management.endpoint.health.roles=ACTUATOR
management.endpoint.metrics.roles=ACTUATOR
management.endpoint.globalinfo.roles=ACTUATOR

或者在 application.yml 中:

management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics,globalinfo
    endpoint:
      globalinfo:
        enabled: true
        roles: ACTUATOR

4. 配置用户凭据和角色

application.properties 中:

spring.security.user.name=actuator_admin
spring.security.user.password=your_secure_password
spring.security.user.roles=ACTUATOR

或者在 application.yml 中:

spring:
  security:
    user:
      name: actuator_admin
      password: your_secure_password
      roles: ACTUATOR

5. 确保端点已暴露

检查您的配置是否确实暴露了 globalinfo 端点:

management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics,globalinfo

测试访问

配置完成后,您可以使用以下方式测试访问:

  1. 使用浏览器或工具(如 Postman)访问 /actuator/globalinfo

  2. 当提示输入凭据时,使用您配置的用户名和密码

  3. 确保您能够成功访问该端点

其他注意事项

  1. 禁用不必要的端点:如果某些端点不需要使用,建议禁用它们以减少攻击面

  2. 使用 HTTPS:为了保护敏感信息,建议使用 HTTPS 来保护 Actuator 端点的通信

  3. IP 限制:考虑限制可以访问 Actuator 端点的 IP 地址范围

  4. 日志监控:监控对 Actuator 端点的访问日志,以便及时发现异常访问

通过以上步骤,您应该能够解决 /actuator/globalinfo 端点的 403 错误问题,并确保只有授权用户才能访问这些敏感的监控端点。


解决 Spring Boot Actuator 403 错误的方法
https://uniomo.com/archives/jie-jue-spring-boot-actuator-403-cuo-wu-de-fang-fa
作者
雨落秋垣
发布于
2025年10月07日
许可协议