2016-11-02 6 views
3

Wir verwenden die JWT-Authentifizierung in einer Spring Boot-Anwendung. Zum Schutz vor CSRF-Angriffen möchten wir das Token in einem benutzerdefinierten HTTP-Header anstelle eines Cookies an den Server zurücksenden.Wie füge ich einen benutzerdefinierten HTTP-Anfrage-Header zu einem Thymeleaf-generierten Formular oder Link hinzu?

Gibt es eine Möglichkeit, Thymeleaf XMLHttpRequest für die Links in generiert zu verwenden? Wir wollen nicht durch die Vorlagen trollen, die alle th: href-Anker durch javascript onclick-Handler ersetzen.

+0

http://www.baeldung.com/java-json-web-tokens-jjwt –

Antwort

1

kurze antwort: nein!

lange Antwort: die Frage ist ungültig um ehrlich zu sein. Thymoleaf ist nur eine Bibliothek, um HTML/XML zu generieren. XMLHttpRequest, das auch als AJAX (*) bekannt ist, wird nur über Javascript verwendet.

Darüber hinaus ist es nicht möglich, benutzerdefinierte Header mit Formular Post ohne Javascript zu senden. Sie müssen also etwas Javascript schreiben, um benutzerdefinierte Header zusammen mit Ihrem Formular hinzuzufügen. Dieses benutzerdefinierte Javascript sollte von Ihnen geschrieben werden Thymeleaf hat keinen Mechanismus, um es zu automatisieren.

* Für zukünftige Kommentare: Ich weiß, das ist nicht präzise, ​​nicht pedantisch sein;)


Sie Ihren Token an der Seite wie diese hinzufügen kann [siehe Meta-Tag]:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" 
     xmlns:layout="http://www.w3.org/1999/xhtml" 
     layout:decorator="Layout"> 
    <head> 
     <title>Example</title> 

     <meta name="_jwt" th:content="${yourToken}"/> 
    </head> 
    ... 

dann in allen Ajax-Anfrage können Sie diese Meta-Werte lesen und als benutzerdefinierte Header hinzufügen.

Zum Beispiel, wenn Sie jQuery verwenden Sie global konfigurieren, dass alle Anfragen Ajax jQuery wie folgt:

$(function(){ 
    var _token = $('meta[name="_jwt"]').attr('content'); 

    $.ajaxPrefilter(function (options, originalOptions, jqXHR) { 
     jqXHR.setRequestHeader("your_jwt_token_header_name", _token); 
    }); 
}); 
Verwandte Themen