Ich habe versucht, CSRF/XSRF-Schutz zu meiner Anwendung hinzufügen, aber lief in seltsames Verhalten. Alle bekommen Anfragen funktionieren gut, aber auf alle Post/put/delete Ich bekomme 403 nicht autorisiert. Und das Seltsamste ist, dass, wenn ich versucht habe, meinen CSRF-Filter zu debuggen, Anfragen ihn nicht erreichen, sie werden irgendwo früher zurückgewiesen. Sie erreichen nicht einmal meinen Authentifizierungsfilter, so dass ich nicht herausfinden kann, was das Problem sein könnte.CSRF/XSRF-Schutz für Spring Security und AngularJS
Meine Sicherheit config:
@Override
public void configure(HttpSecurity http) throws Exception {
http
...
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.addFilterBefore(new StatelessAuthenticationFilter(tokenAuthenticationService()), UsernamePasswordAuthenticationFilter.class)
.addFilterAfter(new CsrfHeaderFilter(), CsrfFilter.class)
.csrf().csrfTokenRepository(csrfTokenRepository());
}
private CsrfTokenRepository csrfTokenRepository() {
HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
repository.setHeaderName("X-XSRF-TOKEN");
return repository;
}
ich nicht hinzufügen, die Filter, da wie gesagt, die Anforderungen sie nicht erreichen. Aber wenn nötig, werde ich meine Frage vervollständigen. Ich hoffe auf Ihre Hilfe, danke im Voraus!
aus diesem Grunde ich meine benutzerdefinierten CSRF-Filter implementiert, aber mein Das Problem ist, dass Anfragen es nicht einmal erreichen. "Was ist sehr seltsam. –
@AnarSultanov, können Sie bitte den Code von Ihnen Filter? Obwohl, ist es egal, weil Sie Filter hinzufügen * nach * Spring' CsrfFilter'. Und wenn der Springs-Filter das Token der Benutzersitzung nicht finden kann (was nicht erreicht werden kann, weil es keine Sitzung gibt) ruft 'accessDeniedHandler' auf und macht' return' (breaking filters chain), was bedeutet, dass es filterChain.doFilter (request, response); 'nicht aufruft, damit Ihr Filter nicht wirklich danach aufgerufen werden kann. Wenn Sie Ihren eigenen CSRF-Schutz implementieren, dann sollten Sie die Implementierung von Spring deaktivieren, indem Sie '.csrf(). Disable()' aufrufen. – Leffchik
Ich habe gefunden, was mein Problem sein kann. Ich habe XSRF-TOKEN in Cookies, aber eckig hinzufügen Header mit diesem Token nicht Anfragen. Jetzt versuche ich herauszufinden, warum und wie ich das beheben kann. –