Если для безопасных API-интерфейсов аутентификация отсутствует, тело запроса пусто.

Я пытаюсь регистрировать тело запроса для всех запросов в приложении с реактивной загрузкой Spring, защищенном с помощью Spring Security. Но я столкнулся с проблемой, когда тело запроса регистрируется только в том случае, если присутствует базовый заголовок аутентификации (даже если имя пользователя и пароль недействительны). Но если заголовок auth отсутствует, тело запроса не регистрируется. Я не уверен, что мне не хватает, и хотел бы узнать, как я могу получить доступ к телу запроса в случаях, когда отсутствует заголовок аутентификации.

Ведение журнала тела запроса выполняется с использованием точки входа аутентификации, установленной на HttpBasicSpec. Конфигурация безопасности выглядит следующим образом:

@Configuration
@EnableWebFluxSecurity
class SecurityConfiguration {

    private val logger = LoggerFactory.getLogger(this::class.java)

    @Bean
    fun securityConfigurationBean(http: ServerHttpSecurity) =
        http.csrf().disable()
                .cors().disable()
                .httpBasic()
                .authenticationEntryPoint { exchange, _ ->
                    exchange.request.body
                            .subscribe { logger.info(CharsetUtil.UTF_8.decode(it.asByteBuffer()).toString()) }
                            .let { Mono.error(HttpServerErrorException(HttpStatus.UNAUTHORIZED)) }
                }.and().authorizeExchange().anyExchange().authenticated().and().build()
}

Есть тестовая конфигурация роутера, у которой один маршрут:

@Configuration
class TestRouterConfig {

    @Bean
    fun testRoutes() =
            router {
                POST("/test") {
                    ServerResponse.ok().bodyValue("This is a test route")
                }
            }
}

Когда я обращаюсь к http:localhost:8080/test с телом запроса

{"sample": "sample"}

с недопустимым именем пользователя и паролем в базовом заголовке аутентификации я вижу в консоли следующее:

2019-12-06 11:51:18.175  INFO 11406 --- [ctor-http-nio-2] uration$$EnhancerBySpringCGLIB$$5b5f0067 : {"sample": "sample"}

Но когда я удаляю аутентификацию полностью, я не вижу приведенного выше оператора регистрации для той же конечной точки (я использую клиент отдыха для выполнения этих вызовов).

Версии инструментов / фреймворков / языков:

  • Котлин: 1.3.50
  • Пружинная загрузка: 2.2.1
  • Java: 12
  • Gradle: 5.6.4
  • Управление зависимостями Spring: 1.0.8.RELEASE

Я хотел бы иметь возможность регистрировать тело запроса для всех запросов, которые приводят к сбою аутентификации, включая отсутствие заголовка аутентификации, и был бы признателен за любую помощь в этом отношении. Приношу свои извинения, если это обсуждалось / размещалось в другом месте.

Спасибо!

0 ответов

Другие вопросы по тегам