我正在尝试在使用 Spring Security 保护的 Spring Boot 反应式应用程序中记录所有请求的请求正文。但是我遇到了一个问题,即仅在基本身份验证标头存在时才记录请求正文(即使用户名和密码无效)。但是,如果不存在 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
- 爪哇:12
- 分级:5.6.4
- Spring依赖管理:1.0.8.RELEASE
我希望能够记录导致身份验证失败的所有请求的请求正文,包括缺少身份验证标头,并希望在这方面提供任何帮助。如果这已在其他地方讨论/发布,我深表歉意。
谢谢!