我有一个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
回复。所以我想添加一条规则,允许POST
上antMatcher
的匿名请求。
我使用了.antMatchers(HttpMethod.POST, "/user").anonymous()
:
.antMatchers(HttpMethod.POST, "/user").anonymous()
但问题是我不知道在哪里添加这个,我在403
之前和之后尝试过,但似乎因为我仍然得到database/sql
而被忽略了。
答案 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的更多信息。