0

我正在尝试在使用 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

我希望能够记录导致身份验证失败的所有请求的请求正文,包括缺少身份验证标头,并希望在这方面提供任何帮助。如果这已在其他地方讨论/发布,我深表歉意。

谢谢!

4

0 回答 0