You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3中Spring Security对POST请求始终返回HTTP 403求助

问题:Spring Boot 3中POST请求返回403,GET请求正常

正在运行一个现有的Spring Boot 3应用,遇到以下问题:除/health和/info接口外,Spring Security对所有POST请求均返回HTTP 403状态码,而GET请求可正常通过认证。

错误响应

{
  "timestamp": "2023-11-28T21:31:49.646+00:00",
  "status": 403,
  "error": "Forbidden",
  "path": "/test-service/v1/test"
}

POM依赖

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

ActuatorSecurity配置类

@Configuration
@EnableWebSecurity
public class ActuatorSecurityConfig {

  @SuppressWarnings("squid:S2068")
  private static final int BCRYPT_STRENGTH = 16;

  @Value("${metrics_password}")
  private String metricsPassword;

  @Bean
  public InMemoryUserDetailsManager userDetailsManager() {
     BCryptPasswordEncoder encoder = passwordEncoder();
     String result = encoder.encode(metricsPassword);
     UserDetails user = User
        .withUsername("actuator")
        .password(result)
        .roles("ACTUATOR_ADMIN")
        .build();

    return new InMemoryUserDetailsManager(user);
  }

  @Bean
  public static BCryptPasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder(BCRYPT_STRENGTH);
  }

  @Bean
  public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    return http
        .authorizeHttpRequests()
        .anyRequest().permitAll()
        .and().httpBasic()
        .and()
        .build();
  }
}

application.properties配置

metrics_password = password123

疑问与排查请求

GET请求无需额外认证即可通过,那POST请求是否需要携带Basic Auth认证头?恳请提供排查建议。


排查建议

  • 检查CSRF防护:Spring Security默认开启CSRF防护,会对POST、PUT、DELETE等修改型请求校验CSRF Token,GET请求不受该规则约束。你的当前配置未关闭CSRF,这是最可能的原因。可以临时在filterChain中添加.csrf(csrf -> csrf.disable())测试是否恢复正常,但生产环境建议通过配置CSRF Token而非直接关闭来解决。
  • 排查是否存在多Security配置类:Spring Boot会加载所有标记@Configuration的Security配置类,若存在其他配置,可能会覆盖当前anyRequest().permitAll()的规则,导致POST请求被拦截。检查项目中是否有其他@EnableWebSecurity的配置类。
  • 查看Security日志:开启DEBUG级别的Spring Security日志,添加配置logging.level.org.springframework.security=DEBUG到application.properties,通过日志追踪POST请求的认证授权流程,明确被拒绝的具体原因。
  • 测试携带Basic Auth头:尽管配置了permitAll,仍可尝试在POST请求中携带actuator/password123的Basic Auth头,验证是否能正常响应,排除是否存在未被发现的认证规则。
  • 确认Actuator配置是否影响全局:检查Actuator的端点暴露配置(如management.endpoints.web.exposure.include),确认是否有额外的Security拦截规则被应用到全局接口。

内容的提问来源于stack exchange,提问作者JsbDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 03:16:25