Spring 安全 - 基本身份验证

Spring security - Basic auth

我正在尝试使用 POST 请求插入数据,但出现 403 错误。当我使用 GET 时,基本身份验证有效。为了测试,我使用 Fiddler。

有什么问题?

安全配置:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/**").hasRole("USER").and()
                .httpBasic();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth)
            throws Exception {
        auth
            .inMemoryAuthentication()
                .withUser("user")
                    .password("password")
                    .roles("USER");
    }
}

请求 - POST:

User-Agent: Fiddler
Host: localhost:8080
Content-Length: 200
Content-Type: application/json
Authorization: Basic dXNlcjpwYXNzd29yZA==

请求正文:

{"name" : "name1",
"description" : "desc1"}

试试这个:

@Configuration
@EnableWebSecurity
public class HelloWebSecurityConfiguration
   extends WebSecurityConfigurerAdapter {

  @Autowired
  public void configureGlobal(AuthenticationManagerBuilder auth) {
    auth
      .inMemoryAuthentication()
        .withUser("user").password("password").roles("USER");
  }
}

来源:http://spring.io/blog/2013/07/03/spring-security-java-config-preview-web-security/

可能是 CSRF,spring 安全性默认启用。在您的 GET 请求中查找 X-XSRF-TOKEN header,并在您的 POST.

中使用该 header 和值

这样做之前请三思,但您可以使用

禁用 csrf
http.csrf().disable()

https://docs.spring.io/spring-security/site/docs/current/reference/html/web-app-security.html#csrf