解决 Spring Boot Actuator 403 错误的方法
[GET] "/actuator/globalinfo": 403 表示您尝试访问 Spring Boot Actuator 的 /actuator/globalinfo 端点时被服务器拒绝访问(HTTP 状态码 403 Forbidden)。这是一个典型的权限问题,表明您没有足够的权限访问该端点。
403 错误的原因分析
403 错误表示服务器理解了您的请求,但拒绝执行它。在 Spring Boot Actuator 的上下文中,这通常是由于以下原因之一:
未授权访问:Actuator 端点默认需要授权才能访问
缺少必要的角色或权限:您可能没有配置正确的用户角色来访问该端点
端点未暴露:该端点可能没有被包含在暴露的端点列表中
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.properties 或 application.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: ACTUATOR4. 配置用户凭据和角色
在 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: ACTUATOR5. 确保端点已暴露
检查您的配置是否确实暴露了 globalinfo 端点:
management:
endpoints:
web:
exposure:
include: health,info,metrics,globalinfo测试访问
配置完成后,您可以使用以下方式测试访问:
使用浏览器或工具(如 Postman)访问
/actuator/globalinfo当提示输入凭据时,使用您配置的用户名和密码
确保您能够成功访问该端点
其他注意事项
禁用不必要的端点:如果某些端点不需要使用,建议禁用它们以减少攻击面
使用 HTTPS:为了保护敏感信息,建议使用 HTTPS 来保护 Actuator 端点的通信
IP 限制:考虑限制可以访问 Actuator 端点的 IP 地址范围
日志监控:监控对 Actuator 端点的访问日志,以便及时发现异常访问
通过以上步骤,您应该能够解决 /actuator/globalinfo 端点的 403 错误问题,并确保只有授权用户才能访问这些敏感的监控端点。