2016-06-24 9 views
24

gefunden wurde ich Frühling Sicherheit verwenden zusammen mit Java-ConfigKönnte die mitgelieferte CSRF-Token nicht überprüfen, weil die Sitzung nicht im Frühjahr Sicherheit

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http 
    .authorizeRequests() 
    .antMatchers("/api/*").hasRole("ADMIN") 
    .and() 
    .addFilterAfter(new CsrfTokenResponseHeaderBindingFilter(), CsrfFilter.class) 
    .exceptionHandling() 
    .authenticationEntryPoint(restAuthenticationEntryPoint) 
    .and() 
    .formLogin() 
    .successHandler(authenticationSuccessHandler) 
    .failureHandler(new SimpleUrlAuthenticationFailureHandler()); 

ich PostMan bin mit meinem REST-Service für das Testen. Ich erhalte 'csrf-Token' erfolgreich und ich kann mich anmelden, indem ich X-CSRF-TOKEN im Anfrage-Header benutze. Aber nach dem Login, wenn ich post-Anfrage (ich bin mit gleichen Token in Anfrage Header, die ich für Login-Anfrage verwendet) Ich bekomme die folgende Fehlermeldung:

HTTP-Status 403 - Konnte das CSRF-Token nicht überprüfen, weil Ihre Sitzung wurde nicht gefunden.

Kann mir jemand sagen, was ich falsch mache.

+0

vielleicht können Sie überprüfen, http://stackoverflow.com/questions/38886190/ can-not-verify-the-css-csrf-token-da-your-session-was-nicht-gefunden/38888894 # 38888894 – FreezY

Antwort

-2

Ich habe es gelöst, indem ich das letzte Attribut in meiner Anmeldeseite hinzufüge, vielleicht wird es einen Gefallen tun.

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" isELIgnored="false"%> 
+0

Dies ist nicht die Lösung, die ich suche, denn wie ich in der Frage erwähnt habe, dass ich bin Restdienste implementiert und ich sende Anfragen von RestClient nicht von J SP oder Webbrowser. –

55

Nach spring.io:

Wann sollten Sie CSRF-Schutz verwenden? Unsere Empfehlung ist CSRF Schutz für jede Anfrage, die von einem Browser von normalen Benutzern verarbeitet werden könnte. Wenn Sie nur einen Dienst erstellen, der von Clients ohne Browser verwendet wird, möchten Sie wahrscheinlich den CSRF-Schutz deaktivieren.

So ist es zu deaktivieren:

@Configuration 
public class RestSecurityConfig extends WebSecurityConfigurerAdapter { 
    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
    http.csrf().disable(); 
    } 
} 

Hinweis: CSRF-Schutz standardmäßig mit Java-Konfiguration aktiviert ist

+5

CSRF-Schutz ist standardmäßig mit Java-Konfiguration aktiviert. –

+0

Das Deaktivieren von CSRF wird nicht empfohlen. Was, wenn ich meine API mit Postman testen wollte, aber CSRF aktiviert wollte, da die API von einem Browser verwendet würde? Deaktivieren von CSRF ist der falsche Ansatz – robjwilkins

+0

@robjwilkins Ich hoffe, Sie erhalten Ihre Antwort hier - https://stackoverflow.com/questions/30498328/selective-usage-of-spring-securitys-csrf-filter?noredirect=1&lq=1 oder hier https://stackoverflow.com/questions/26179940/spring-security-enable-disable-csrf-by-client-type-browser-non-browser –