Я опубликовал два примера этих микросервисов по адресу https://github.com/polifr. /csrf-servlet и https://github.com/polifr/csrf-reactive, в комплекте с тестовыми классами junit и тремя различными конфигурациями CSRF (отключено, включено, настроено с определенными исключениями); Я обращусь к источникам этих проектов, чтобы объяснить ситуацию дальше.
Конечная точка конфигурации журналирования подпадает под управление политики CSRF, поскольку вызывается с помощью POST. В случае сервлета исключение можно установить с помощью метода ignoreRequestMatchers, например (
Код: Выделить всё
CsrfIgnoringSecurityConfiguration
Код: Выделить всё
log.debug("Csrf is enabled");
http.csrf(
csrf ->
csrf.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.ignoringRequestMatchers(EndpointRequest.to(LoggersEndpoint.class)));
Вместо этого для реактивного стека: нет эквивалентного метода; Я попробовал решение, приведенное в разделе «Как добавить отключение CSRF для определенного URL-адреса в базовой аутентификации Spring Web Flux (реактивное программирование), но оно не работает: фактически оно блокирует CSRF все остальные конечные точки, а также GET.
На данный момент единственное решение, которое я нашел, это (
Код: Выделить всё
CsrfIgnoringSecurityConfiguration
Код: Выделить всё
log.debug("Csrf is enabled");
http.csrf(
csrf ->
csrf.csrfTokenRepository(CookieServerCsrfTokenRepository.withHttpOnlyFalse())
.requireCsrfProtectionMatcher(
new AndServerWebExchangeMatcher(
CsrfWebFilter.DEFAULT_CSRF_MATCHER,
new NegatedServerWebExchangeMatcher(
EndpointRequest.to(LoggersEndpoint.class)))));
Код: Выделить всё
private void registerDefaultCsrfOverride(ServerHttpSecurity http) {
if (http.csrf != null && !http.csrf.specifiedRequireCsrfProtectionMatcher) {
AndServerWebExchangeMatcher matcher = new AndServerWebExchangeMatcher(
CsrfWebFilter.DEFAULT_CSRF_MATCHER,
new NegatedServerWebExchangeMatcher(this.authenticationConverterServerWebExchangeMatcher));
http.csrf().requireCsrfProtectionMatcher(matcher);
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... plications