Spring(Boot)应用程序和csrf

时间:2016-10-24 13:12:23

标签: spring-security spring-boot

我在WebSecurityConfigurerAdapter #configure方法中使用此语句来保护我的应用程序。 如果csrf被禁用( http.csrf()。disable(); ),那么一切正常,如果我删除这一行而不是我得到一个例外(Forbidden 403)。 我不清楚为什么 - 我想要防止csrf攻击。 有谁知道我做错了什么?

@覆盖     protected void configure(final HttpSecurity http)抛出异常{

    final List<String> activeProfiles = Arrays.asList(environment.getActiveProfiles());

    final CsrfTokenResponseHeaderBindingFilter csrfFilter = csrfTokenResponseHeaderBindingFilter();
    http.addFilterAfter(csrfFilter, CsrfFilter.class).headers().cacheControl().xssProtection();

    http.csrf().disable();
    http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

    final String[] restEndpointsToSecure = WebSecurityConfig.restEndpointsToSecure;
    for (final String endpoint : restEndpointsToSecure) {
        http.authorizeRequests().antMatchers("/" + endpoint + "/**").hasRole(UserRoleEnum.USER.toString());
    }
    xAuthTokenConfigurer.setDetailsService(userDetailsServiceBean());
    final SecurityConfigurer<DefaultSecurityFilterChain, HttpSecurity> securityConfigurerAdapter = xAuthTokenConfigurer;
    http.apply(securityConfigurerAdapter);
}

1 个答案:

答案 0 :(得分:1)

Spring Security CSRF Documentation

您需要在请求中包含令牌。如果您使用Thymeleaf作为模板引擎,则会自动处理。该文档还描述了如何处理Ajax。