2016-11-02 1 views
3

Мы используем аутентификацию JWT в приложении Spring Boot. Чтобы защитить от атак CSRF, мы хотим отправить токен обратно на сервер в пользовательский HTTP-заголовок вместо cookie.Как добавить пользовательский заголовок HTTP-запроса в форму или ссылку на Thymeleaf?

Есть ли способ заставить Thymeleaf использовать XMLHttpRequest для создаваемых ссылок? Мы не хотим прокручивать шаблоны, заменяя все якоря h: href обработчиками onclick javascript.

+0

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

ответ

1

короткий ответ: нет!

длинный ответ: вопрос недействителен, если честно. Thymeleaf - это просто библиотека для генерации HTML/XML. XMLHttpRequest, который также известен как AJAX (*), используется только через javascript.

Кроме того, невозможно отправить пользовательские заголовки с сообщением формы без javascript. Поэтому вам нужно написать javascript, чтобы добавить пользовательские заголовки вместе с вашей формой. Этот пользовательский javascript должен быть написан вами. Thymeleaf не имеет механизма для его автоматизации.

* Для будущих комментариев: Я знаю, что это не точно, не педантом;)


вы можете добавить маркер на страницу, как это [см мета-тег]:

<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> 
    ... 

тогда во всех запросах ajax вы можете прочитать эти метазначения и добавить в качестве пользовательских заголовков.

Например, если вы используете JQuery вы можете глобально настроить все запросы Ajax Jquery следующим образом:

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

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