Spring Security 对于 POST 请求始终返回 HTTP 403

问题描述 投票:0回答:1

我正在尝试运行现有的 Spring Boot 3 应用程序,但我发现这很难,因为 Spring Security 总是为除

/health
/info
之外的所有请求返回 HTTP 403。

错误响应:

{
  "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();
  }
}

应用程序.属性

metrics_password = password123

这是否需要在请求中包含 Basic Auth 身份验证标头?我发现这很令人困惑,因为 GET 请求的身份验证没有任何问题。

如有任何建议,我们将不胜感激。

spring-boot spring-security spring-boot-actuator
1个回答
0
投票

检查这个403是否是缺少CSRF token导致的。这可以通过调整

CsrfFilter
application.yaml
的日志记录级别来完成:

logging.level:
    org.springframework.security.web.csrf.CsrfFilter: debug

您也可以尝试禁用CSRF保护

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    return http
        // ...
        .csrf(c -> c.disable())
© www.soinside.com 2019 - 2024. All rights reserved.