Если вы хотите использовать CSRF с ложным поваром только для http ie, почему бы не использовать встроенную в Spring Security CookieCsrfTokenRepository
? Это должно упростить ваш конфиг. CustomCsrfFilter
, кажется, добавляет XSRF-TOKEN
cook ie к HttpServletResponse
, что CookieCsrfTokenRepository
делает для вас .
Имя по умолчанию CSRF cook ie, когда использование CookieCsrfTokenRepository
- это X-CSRF-TOKEN
, которое обычно используется по умолчанию для имени Angular HttpClientXsrfModule
. Конечно, вы можете настроить это, если вам нужно.
Таким образом, ваша конфигурация безопасности становится такой:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.and()
.exceptionHandling()
.authenticationEntryPoint(new Http403ForbiddenEntryPoint())
.and()
.authenticationProvider(getProvider())
.formLogin()
.loginProcessingUrl("/api/login")
.successHandler(new AuthentificationLoginSuccessHandler())
.failureHandler(new SimpleUrlAuthenticationFailureHandler())
.and()
.logout()
.logoutUrl("/api/logout")
.logoutSuccessHandler(new AuthentificationLogoutSuccessHandler())
.invalidateHttpSession(true)
.and()
.authorizeRequests()
.anyRequest().authenticated();
}
И с Angular ваш модуль приложения имеет HttpClientXsrfModule
как
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
HttpClientModule,
HttpClientXsrfModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }