HttpSecurity POST 403禁止

时间:2018-10-29 00:00:45

标签: spring-boot spring-security

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

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

GET \users - no authentication
GET \details\1 - needs authentication
GET \users\1 needs authentication
POST \users\1 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>

2 个答案:

答案 0 :(得分:1)

我怀疑是csrf引起的问题。

如果您不使用csrf,但默认情况下仍将启用它。请参见Cross Site Request Forgery (CSRF),因此请尝试禁用csrf保护。

如果您在安全性中启用了CSRF,则需要更新您的帖子请求以包括一些其他信息。它解释了为什么GET有效但POST无效的原因。

根据您的情况,尝试按如下所示禁用它,并查看它是否可以解决问题。

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

答案 1 :(得分:1)

我发现this有用

http.csrf().disable().cors().and().....