无法在POST请求中从Spring Security保护中排除一个URI

时间:2016-03-27 19:38:45

标签: java spring spring-security

我有一个HttpSecurity如下:

http
   .exceptionHandling().and()
   .anonymous().and()
   .servletApi().and()
   .headers().cacheControl().and().and()
   .authorizeRequests()
       // Need authentication sur POST
       .antMatchers(HttpMethod.POST).authenticated()
       // Allow anonymous resource requests
       .anyRequest().permitAll().and()
   // Custom Token based authentication based on the header previously given to the client
   .addFilterBefore(new StatelessAuthenticationFilter(tokenAuthenticationService),
                        UsernamePasswordAuthenticationFilter.class)
   // Filtre pour gérer la clef d'api
   .addFilterBefore(new ApiKeyFilter(), StatelessAuthenticationFilter.class)
   // Filtre pour ajouter les headers nécessaires à la consommation par les différents clients
   .addFilterBefore(new CorsFilter(), ApiKeyFilter.class);

问题是,我需要POST /user 403 Forbidden,而不会得到/user回复。所以我想添加一条规则,允许POSTantMatcher的匿名请求。

我使用了.antMatchers(HttpMethod.POST, "/user").anonymous()

.antMatchers(HttpMethod.POST, "/user").anonymous()

但问题是我不知道在哪里添加这个,我在403之前和之后尝试过,但似乎因为我仍然得到database/sql而被忽略了。

1 个答案:

答案 0 :(得分:0)

antMatchers(HttpMethod.POST).authenticated()之前添加规则。此外,由于默认情况下启用了CSRF保护,因此您应该在POST请求中将其禁用或提供 CSRF令牌。在这里,我只是禁用CSRF:

// Same as before
.authorizeRequests()
    .antMatchers(HttpMethod.POST, "/user").permitAll()
    // Need authentication sur POST
    .antMatchers(HttpMethod.POST).authenticated()
    // Allow anonymous resource requests
    .anyRequest().permitAll()
.and
.csrf().disable();
// Same as before

您可以在Spring Security Documentation上了解有关CSRF的更多信息。