Spring Security 在发布请求时收到 401

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

嗨,我正在学习 Spring,但是当我觉得开始使用它很方便时,当然我又遇到了问题......但是这次即使经过几个小时的搜索也找不到任何解释。

问题 当执行 Post 请求时,我收到 401。如果我执行 get 请求,则一切正常。 我创建了多个带或不带 Requestbody 的 Post 请求,但总是出现同样的问题。另外,如果我使用以下方法禁用身份验证:

.requestMatchers("/api").permitAll()
,我仍然会收到 POST 请求的 401。

首先我想到了 cors,但首先我使用的是邮递员,其次没有 json 的 Post 应该不是问题。通常。

重现问题

我创建了以下最小项目来重现该问题:

Spring 安全配置

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
                .authorizeHttpRequests((authorize) -> authorize
                        .anyRequest().authenticated()
                )
                .httpBasic(Customizer.withDefaults());

        return http.build();
    }

    @Bean
    public UserDetailsService userDetailsService() {
        UserDetails userDetails = User.withDefaultPasswordEncoder()
                .username("user")
                .password("password")
                .roles("USER")
                .build();

        return new InMemoryUserDetailsManager(userDetails);
    }

}

弹簧控制器

@RestController
@RequestMapping("/api")
public class MainController {

    @GetMapping
    public String helloGet() {
        return "Hello from Get";
    }

    @PostMapping
    public String helloPost() {
        return "Hello from Post";
    }


}
java spring spring-security
1个回答
0
投票

尝试添加

http.csrf(csrf -> csrf.disable()); // or .csrf(AbstractHttpConfigurer::disable)

进入你的

securityFilterChain
方法。

如果有效,则确认“问题”是 CSRF。然后我建议阅读有关 CSRF 的更多内容,以检查它是否可以安全地针对您的用例禁用它:

或者调查更多有关如何使 POST 请求工作的信息 with CSRF:

© www.soinside.com 2019 - 2024. All rights reserved.