Мы используем Spring Security с нашим приложением в течение нескольких лет. На прошлой неделе мы обновили Spring Безопасность с версии 3.1.4 до 3.2.0. Обновление прошло нормально, и мы не обнаружили никаких ошибок после обновления.
При просмотре документации Spring Security 3.2.0 мы столкнулись с недавно добавленными функциями вокруг заголовков защиты и безопасности CSRF. Мы выполнили инструкции в документации Spring Security 3.2.0, чтобы включить защиту CSRF для наших защищенных ресурсов. Он отлично работает для обычных форм, но не работает для многочастных форм в нашем приложении. При отправке формы CsrfFilter
выдает ошибку Access Denied, ссылающуюся на отсутствие токена CSRF в запросе (определяемом через журналы DEBUG). Мы попытались использовать первый вариант, предложенный в Spring Документация по безопасности для обеспечения защиты CSRF с многочастными формами. Мы не хотим использовать второй предложенный вариант, поскольку он пропускает токены CSRF через URL-адреса и создает угрозу безопасности.
Соответствующая часть нашей конфигурации на основе документации доступна в виде Gist в Github. Мы используем Spring версию 4.0.0.
Обратите внимание, что мы уже пробовали следующие варианты без успеха:
- Не объявлять
MultipartFilter
вweb.xml
. - Не устанавливать имя преобразователя bean для
MultipartFilter
вweb.xml
. - Использование распознавателя по умолчанию bean name
filterMultipartResolver
вwebContext.xml
.
ОБНОВЛЕНИЕ: Я подтвердил, что документированное поведение не работает даже с примером приложения с одной страницей. Может ли кто-нибудь подтвердить, что документированное поведение работает так, как ожидалось? Есть ли пример рабочего приложения, которое можно использовать?