2016-03-31 9 views
1

Wie bekomme ich _csrf Objekt (?!) In Federregler? Ich habe Spring Security konfiguriert und kann das $ {_ csrf} -Anforderungsattribut in JSP-Dateien abrufen. Ich habe versucht:Get _csrf in Federregler

CsrfToken _csrf = (CsrfToken) session.getAttribute("CsrfToken"); 
CsrfToken _csrf = (CsrfToken) session.getAttribute("_csrf"); 

das Ergebnis ist null;

Vielen Dank im Voraus!

Antwort

2

In debug ich ein Session-Attribut mit einem Schlüssel "org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository.CSRF_TOKEN" sah. Ich sah die HttpSessionCsrfTokenRepository Klasse. Es verfügt über eine Methode zum Laden des Tokens vom eingehenden HttpServletRequest-Objekt.

schließlich für mich gearbeitet:

CsrfToken token = new HttpSessionCsrfTokenRepository().loadToken(request); 

ich dankbar, wenn mir jemand erklärt, wie das funktioniert.

1

Versuchen:

CsrfToken token = (CsrfToken) session.getAttribute(CsrfToken.class.getName()); 
+0

Danke für die Antwort @NikolaB. Aber es gibt null. Im Debug sehe ich ein Sitzungsattribut mit einem Schlüssel "org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository.CSRF_TOKEN". – 0bj3ct

0

Ich denke, in Ihren früheren Versuchen haben Sie den CSRF-Parameternamen mit dem Namen des Sitzungsattributs vermischt und auch versucht, CsrfToken.class.getName(), die in früheren Versionen möglicherweise verwendet wurden oder nicht. So einfach, Sie hatten die richtige Idee, aber den falschen Schlüssel. Wenn Sie HttpSessionCsrfTokenRepository auf den Quellcode schauen, sehen Sie, es die folgenden Standardwerte definiert:

private String parameterName = DEFAULT_CSRF_PARAMETER_NAME; 
private String headerName = DEFAULT_CSRF_HEADER_NAME; 
private String sessionAttributeName = DEFAULT_CSRF_TOKEN_ATTR_NAME; 

Der erste ist der Parametername für, wenn das Token kommt als POST Parameter, die zweite ist die Kopf Name für, wenn es in der Anfrage Header kommt, und der dritte ist der Schlüssel für das Speichern in der Sitzung. Die Methode loadToken ruft das Token aus dem Anforderungsobjekt nicht wirklich ab - es ruft das Sitzungsobjekt aus der Anforderung ab und sucht dann das Token, das zuvor mit dem Schlüssel gespeichert wurde, der von sessionAttributeName definiert wird.