Могу ли я использовать функцию CSRF Spring Security только без использования функций LOGIN и LOGOUT? - PullRequest
0 голосов
/ 26 июня 2019

Могу ли я использовать функцию CSRF Spring Security без использования функций входа и выхода из системы?

Я использую страницу HTML вместо JSP, я хочу токен Spring csrf для всех запросов POST, которые я делаю. Для входа в систему мы используем AWS Cognito.

Ответы [ 2 ]

2 голосов
/ 26 июня 2019

Да, вы можете использовать его с HTML, так как Spring Security имеет его по умолчанию.Я использовал его с Thymeleaf для работы на стороне сервера.

По сути, вы можете просто назвать пространство имен thymeleaf в своем HTML-файле следующим образом.

<html lang="en" xmlns:th="http://www.thymeleaf.org">
... 

И приложению Spring вы должны импортировать следующие зависимости:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

В файле application.yml (или application.properties) следующие конфиги.

spring:
    thymeleaf:
        enabled: true
        prefix: classpath:/static/ # This static directory located in the resource folder of maven directory structure and all the html and its css/js resources go in there.
        suffix: .html
        cache: false
        enable-spring-el-compiler: true
        check-template: true
        mode: HTML
        encoding: UTF-8

Нет, вы можете добавить токен CSRF на веб-страницу, просто используя два мета-тега в разделе заголовка вашего html.

<meta name="_csrf" th:content="${_csrf.token}">
<meta name="_csrf_headerName" th:content="${_csrf.headerName}">

или, если вы используете <form>, добавьте это скрытое поле ввода в <form>,

<input th:name="${_csrf.parameterName}" th:value="${_csrf.token}" type="hidden"/>

If, вы должны определить их в метатег и нужно сделать запрос Ajax, вот фрагмент JQuery;

$.ajax({
        url: '/url',
        method: 'POST',
        data: {"some": "data"},
        beforeSend: (jqXHR) => {
            jqXHR.setRequestHeader(
                $("meta[name='_csrf_headerName']").attr('content'),
                $("meta[name='_csrf']").attr('content'));

        },
        success: (data, textStatus, jqXHR) => {
            // if success.
        },
        error: (jqXHR) => {
           // if error.
        },
        complete: (jqXHR, textStatus) => {
            // Anyway completed.
        }
});
0 голосов
/ 26 июня 2019

да, вы можете сделать это. но это противоречит концепции CSRF ..

написать этот код внутри Spring Configurer класса безопасности

private  final String LOGIN_URL= "";//your login url
private  final String LOGOUT_URL = "";//your logout url

protected void configure(HttpSecurity http) throws Exception {
    // other code here.........
    http.csrf().ignoringAntMatchers(LOGIN_URL, LOGOUT_URL);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...