如何使用Grails3记录请求和响应(头和正文)?

如何使用Grails3记录请求和响应(头和正文)?,grails,spring-boot,grails-3.0,Grails,Spring Boot,Grails 3.0,我正在寻找在Grails3应用程序中记录传入请求和返回响应(headers+body)的方法。Grails有拦截器的概念,但在这些拦截器中,我无法读取主体,因为主体只能读取一次。因此,如果在拦截器中执行此操作,则正常控制器逻辑将失败,并出现一个错误,指示流已关闭 我还试图找到如何使用SpringBoot实现这一点的方法,因为Grails实际上是基于SpringBoot的 关于如何在Grails 3应用程序中实现这一点,有什么提示吗?我建议使用以下方法(当我需要类似的功能时,还没有找到任何spri

我正在寻找在Grails3应用程序中记录传入请求和返回响应(headers+body)的方法。Grails有拦截器的概念,但在这些拦截器中,我无法读取主体,因为主体只能读取一次。因此,如果在拦截器中执行此操作,则正常控制器逻辑将失败,并出现一个错误,指示流已关闭

我还试图找到如何使用SpringBoot实现这一点的方法,因为Grails实际上是基于SpringBoot的


关于如何在Grails 3应用程序中实现这一点,有什么提示吗?

我建议使用以下方法(当我需要类似的功能时,还没有找到任何spring boot可用的方法,所以我决定自己开发):

  • 实现一个
    HttpServletRequestWrapper
    ,它将在使用
    InputStream
    时复制字节,以便您可以多次重新读取请求正文

  • 实现并注册一个
    过滤器
    ,该过滤器将在进入过程中包装http请求,并在请求被使用且端点生成响应后记录完整的请求/响应


很好的好处是,您可以在一个日志语句中记录请求和响应,并将它们保存在日志文件中。

我建议使用以下方法(当我需要类似的功能时,还没有找到任何可用于spring boot的方法,所以我决定使用自己的方法):

  • 实现一个
    HttpServletRequestWrapper
    ,它将在使用
    InputStream
    时复制字节,以便您可以多次重新读取请求正文

  • 实现并注册一个
    过滤器
    ,该过滤器将在进入过程中包装http请求,并在请求被使用且端点生成响应后记录完整的请求/响应


很好的好处是,您可以在一个日志语句中记录请求和响应,将它们一起保存在日志文件中。

您是否有关于如何实现筛选器的示例。我们可以引用SpringSecurityCoreGrailsPlugin的DebugFilter类来实现我们自己的。您是否有关于如何实现筛选器的示例。我们可以引用SpringSecurityCoreGrailsPlugin的DebugFilter类来实现我们自己的筛选器实现我们自己的。