POST请求组织,springframework,安全性,身份验证,身份验证不足异常:访问此资源需要完全身份验证

ntjbwcob  于 2022-12-17  发布在  Spring
关注(0)|答案(1)|浏览(210)

与 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请求?

pdtvr36n

pdtvr36n1#

为了保护MVC应用程序,Spring为每个生成的视图添加了一个CSRF令牌,这个令牌必须在每个修改状态的HTTP请求(PATCH、POST、PUT和DELETE --而不是GET)上提交给服务器。
这可以保护我们的应用程序免受CSRF攻击,因为攻击者无法从他们自己的页面获得此令牌。
有关详细信息:https://www.baeldung.com/spring-security-csrf

相关问题