Как загрузить собственный репозиторий токенов CSRF в Spring 5.2?

Наше приложение, использующее структуру Spring, должно реализовать токен CSRF на основе запроса, чтобы соответствовать требованиям безопасности. В настоящее время у нас есть токен CSRF на основе сеанса, предоставляемый HttpSessionCsrfTokenRepository по умолчанию в Spring. Согласно инструкции, которую я нашел, настроив xml следующим образом

<security:csrf token-repository-ref="customRequestCsrfTokenRepository"/>

<bean id="customRequestCsrfTokenRepository" class="com.dev.common_web.security.configuration.CustomCsrfTokenRepository"/>

Пользовательский репозиторий токенов, который реализует интерфейс CsrfTokenRepository, будет загружен для обработки запроса токена.

Однако, когда приложение запускается и работает в режиме отладки, я вижу, что по умолчанию HttpSessionCsrfTokenRepository используется для обработки загрузки и создания токена. Я также пытался использовать spring CookieCsrfTokenRepository в конфигурации xml, например

<security:csrf token-repository-ref="cookieCsrfTokenRepository"/>
<bean id="cookieCsrfTokenRepository" class="org.springframework.security.web.csrf.CookieCsrfTokenRepository"/> 

И когда приложение работает, это снова HttpSessionCsrfTokenRepository, который загружается для обработки запроса токена. Кажется, не имеет значения, что настроено как значение token-repository-ref в xml, всегда используется HttpSessionCsrfTokenRepository.

Как настроить Spring для использования другого репозитория токенов csrf вместо стандартного HttpSessionCsrfTokenRepository? Мы используем Spring 5.2.


person Juan Feng    schedule 17.08.2020    source источник


Ответы (1)


Мне удалось это выяснить :-). В файле security.xml нашего приложения мы также настроили средство сопоставления запросов csrf, определенное для отключения проверки csrf для некоторых страниц. При добавлении настраиваемого репозитория токенов csrf эти два должны быть определены в одной строке внутри ‹security:csrf ... /›. Если они определены в двух строках, как это, загружается только одна.

<security:csrf token-repository-ref="customRequestCsrfTokenRepository"/>
<security:csrf request-matcher-ref="customCsrfRequestMatcher"/>

Это должно быть так

<security:csrf token-repository-ref="customRequestCsrfTokenRepository" request-matcher-ref="customCsrfRequestMatcher" />
   
person Juan Feng    schedule 20.08.2020