与 JWT 一起使用Spring保险。
我的 Spring 安全配置:
@RequiredArgsConstructor
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private final JwtFilter jwtFilter;
private final exceptionHandler exceptionHandler;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.httpBasic().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/api/v1/users/**").hasAnyRole("USER")
.antMatchers("/api/v1/admin/**").hasRole("ADMIN")
.anyRequest()
.authenticated()
.and()
.addFilterBefore(jwtFilter, FilterSecurityInterceptor.class)
.exceptionHandling().authenticationEntryPoint(exceptionHandler);
}
}
当我发送GET请求时一切正常,但当我发送POST时:org.springframework.security.authentication.InsufficientAuthenticationException: Full authentication is required to access this resource
如果我添加.csrf().disable()
,它会有帮助,但我不明白它是如何工作的。为什么Get request OK,但post没有.csrf().disable()
抛出异常?
没有.csrf().disable()
部件是否可以通过POST请求?
1条答案
按热度按时间pdtvr36n1#
为了保护MVC应用程序,Spring为每个生成的视图添加了一个CSRF令牌,这个令牌必须在每个修改状态的HTTP请求(PATCH、POST、PUT和DELETE --而不是GET)上提交给服务器。
这可以保护我们的应用程序免受CSRF攻击,因为攻击者无法从他们自己的页面获得此令牌。
有关详细信息:https://www.baeldung.com/spring-security-csrf