Если для безопасных 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
Я хотел бы иметь возможность регистрировать тело запроса для всех запросов, которые приводят к сбою аутентификации, включая отсутствие заголовка аутентификации, и был бы признателен за любую помощь в этом отношении. Приношу свои извинения, если это обсуждалось / размещалось в другом месте.
Спасибо!