Форум программистов, компьютерный форум, киберфорум
Java: Spring, Spring Boot
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
 Аватар для parkito
15 / 14 / 10
Регистрация: 22.03.2010
Сообщений: 695

Не работает защита от межсайтового скриптинга в spring security

05.10.2016, 04:23. Показов 879. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Помогите, пожалуйста, решить проблему. Настроил спринг секьюрити. Все работает. Авторизация проходит хорошо. Но вот когда я аджаксом пытаюсь выполнить запрос, то получаю
Java
1
org.springframework.web.servlet.PageNotFound Request method 'POST' not supported at org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.handleHttpRequestMethodNotSupported(DefaultHandlerExceptionResolver.java:215)
Т.е. ajax не возбуждает сервлет.

ajax
JavaScript
1
2
3
4
5
6
7
function popBox(num1, num2) {
   x = confirm('Are you sure? ');
   if (x == true) {
     var xhr = new XMLHttpRequest();
    xhr.open("POST", "userChangeTariff?tariffId=" + num1 + "&contractNumber=" + num2, false);
   xhr.send();
}
сервлет

Java
1
2
3
4
5
6
7
8
9
10
11
@RequestMapping(value = "/userChangeTariff", method = RequestMethod.POST)
    public String changeTariff(HttpServletRequest request, Locale locale, Model model,
                               @RequestParam(value = "tariffId") String tariffId,
                               @RequestParam(value = "contractNumber") String contractNumber) {
        int tariffID = Integer.parseInt(tariffId);
        Contract contract = contractService.getContractByNumber(contractNumber);
        Tariff tariff = tariffService.getEntityById(tariffID);
        contract.setTariff(tariff);
        contractService.updateEntity(contract);
        return "user/userTariffs";
    }
Самое интерересное, то что когда я выключаю csrf ( ) все начинает работать.

На странице размещен токен

JavaScript
1
2
<input type="hidden" name="<c:out value="${_csrf.parameterName}"/>"
    value="<c:out value="${_csrf.token}"/>"/>
Почему csrf отрубает мне сервлет? Как это можно исправить?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.10.2016, 04:23
Ответы с готовыми решениями:

Не работает Spring Security
Имеется приложение в которое пытаюсь добавить Spring Security. Действия: 1. Добавил в проект security-context.xml &lt;?xml...

Не работает Spring security
пытаюсь реализовать spring-security. При аутентификации я обращаюсь к базе данных, где проверяю логин и пароль в контроллере. в role...

Почему не работает Bcrypt в Spring Security
В Security Config вроде написал код для Bcrypt, но Томкат ругается @Configuration @EnableWebSecurity public class...

3
149 / 162 / 48
Регистрация: 19.10.2012
Сообщений: 530
05.10.2016, 08:35
Нужно в хидеры запроса добавить csrf токен.
http://stackoverflow.com/quest... ax-request

Кликните здесь для просмотра всего текста
Цитата Сообщение от parkito Посмотреть сообщение
ajax не возбуждает сервлет
1
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
05.10.2016, 08:37
Java
1
2
3
4
5
6
7
function popBox(num1, num2) {
   x = confirm('Are you sure? ');
   if (x == true) {
     var xhr = new XMLHttpRequest();
    xhr.open("POST", "userChangeTariff?tariffId=" + num1 + "&contractNumber=" + num2, false);
   xhr.send();
}
Мне кажется, или в запросе не отправляется токен?
1
 Аватар для parkito
15 / 14 / 10
Регистрация: 22.03.2010
Сообщений: 695
05.10.2016, 16:17  [ТС]
Любопытный, xoraxax, вы были совершенно правы. Спасибо

HTML5
1
2
3
4
5
6
7
8
<html>
    <head>
        <meta name="_csrf" content="${_csrf.token}"/>
        <meta name="_csrf_header" content="${_csrf.headerName}"/>
        ...
    </head>
    ...
</html>
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var csrfHeaderName = "X-CSRF-TOKEN";
var csrfTokenValue;
 
var metaTags = document.getElementsByTagName('meta'); 
for(var i = 0; i < metaTags.length; i++) {
    var metaTagName = metaTags[i].getAttribute("name");
    if(metaTagName === "_csrf_header")
        csrfHeaderName = metaTags[i].getAttribute("content");
    if(metaTagName === "_csrf")
        csrfTokenValue = metaTags[i].getAttribute("content");
}
 
...
var xhr = new XMLHttpRequest();
xhr.open("POST", "userChangeTariff?tariffId=" + num1 + "&contractNumber=" + num2, false);
xhr.setRequestHeader(csrfHeaderName, csrfTokenValue);
xhr.send();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.10.2016, 16:17
Помогаю со студенческими работами здесь

Авторизация не работает при включенной CSRF защите Spring Security
Здравствуйте вот столкнулся с такой проблемой при попытке авторизации получал ответ 403 forbidden и никаких логов хотя, интрецептор...

Jetty embedded + Spring MVC + Spring Security
Добрый день. По роду работы приходилось писать на JavaSE, в том числе и сложные клиент/серверные программы. Использовал Netty, Apache...

Spring. Тесты и Spring-security
Вопрос из области почему так. Есть у меня такой вот тест: @ContextConfiguration(locations =...

Spring Security
Добрый день. Использую SpringSecurity: protected void configure(HttpSecurity http) throws Exception { ...

Spring security
Пытаюсь сделать spring MVC + spring security. При запуске пишет Type Exception Report Message No bean named 'springSecurityFilterChain'...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru