HttpSecurity POST 403 Forbidden

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HttpSecurity POST 403 Forbidden相关的知识,希望对你有一定的参考价值。

我收到错误403 Forbidden for POST端点,其他端点正在按预期工作。

我有4个端点,我需要重现身份验证行为:

GET users - no authentication
GET details1 - needs authentication
GET users1 needs authentication
POST users1 needs authentication

我的配置类:

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(AuthenticationManagerBuilder auth)
        throws Exception {
    auth.inMemoryAuthentication()
            .passwordEncoder(org.springframework.security
                .crypto.password.NoOpPasswordEncoder.getInstance())
            .withUser("user").password("pwd")
            .roles("USER").and().withUser("admin").password("pwd")
            .roles("USER", "ADMIN");
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .authorizeRequests()
            .antMatchers( "/users").permitAll()
            .anyRequest().authenticated()
            .and()
            .httpBasic();
     }
}

Maven依赖:

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

我怀疑csrf造成了这个问题。

如果你没有使用csrf但仍默认启用它。请参阅Cross Site Request Forgery (CSRF)所以尝试禁用csrf保护。

如果您在安全性中启用CSRF,则需要更新您的帖子请求以包含一些额外信息。它解释了为什么GET可以工作,但POST没有。

在您的情况下,尝试禁用它,如下所示,看看它是否解决了问题。

@Override
  protected void configure(HttpSecurity http) throws Exception {
    http
      .csrf().disable();
  }

以上是关于HttpSecurity POST 403 Forbidden的主要内容,如果未能解决你的问题,请参考以下文章

如果 URL 在数据中,POST 返回 403

post方法渲染403禁止页面而不是执行post方法代码

PUT/DELETE 出现 403 错误,但 GET/POST 有效

Django 在发送 POST 请求时返回 403 错误

POST 方法总是返回 403 Forbidden

django post请求 403错误解决方法