使用Grails 4构建一个新的API,我希望可以选择记录完整的请求(标头、方法、内容等)。我可以在Interceptor中看到请求,但是内容只能读取一次(使用HttpServletRequest.getInputStream()
),所以在Interceptor中读取它会阻止内容在Controller中可用。
在堆栈溢出中已经有一些类似的问题,通过使用Grails过滤器来解决这个需求。
我不想走这条路的一个原因是,根据Grails文档,过滤器现在被认为是不建议使用的(从v3.0开始),应该使用拦截器。不幸的是,没有一个解决方案我可以找到工作与拦截器。我自己也尝试了一些这样的解决方案,包括将请求包装在一个HttpServletquiestWrapper
中以缓存主体内容,并遇到了与其他人相同的问题,试图让它与拦截器一起工作。
我已经看到了使用JavaServlet过滤器的建议,这与Grails过滤器没有明显的区别,或者它们是否也应该避免。
编辑:如下面的评论所述,我没有提到我正在使用命令对象,解决方案需要使用这些对象。我还使用了其他一些Grails特性,我不确定这些特性是否会受到提出的任何解决方案的影响,因此,如果提出的解决方案存在局限性,最好了解这些局限性。
新增PoC项目:https://github.com/majkelo/grails4requestinterceptor
基本上添加了一个拦截器PROJECT/grails app/controllers/testrequest/RequestModificatorInterceptor。groovy(修改所有请求):
package testrequest
class RequestModificatorInterceptor {
RequestModificatorInterceptor() {
match(controller: "*", action: "*")
}
boolean before() {
println "INSIDE INTERCEPTOR; BEFORE"
println request.properties
println request.JSON
request.JSON.before = "added"
true
}
boolean after() {
true
}
void afterView() {
// no-op
}
}
和test controller
PROJECT/grails app/controllers/testrequest/TestController。groovy
:
package testrequest
import grails.converters.JSON
class TestController {
def index() {
println "INSIDE CONTROLLER"
println request.JSON
request.JSON.incontroller = true
render request.JSON as JSON
}
}
它在控制器中的拦截器AND中读取/修改POST请求。示例请求:
curl --location --request POST 'http://localhost:8080/test' \
--header 'Content-Type: application/json' \
--data-raw '{"js":"on"}'```
Webpack开发服务器代理配置留档: https://webpack.js.org/configuration/dev-server/#devserver-代理 表示它使用http代理中间件: https://github.com/chimurai/http-proxy-middleware#http-代理事件 使用上述链接中记录的功能,我可以执行以下操作: 我的问题是,尽管其他一切都很好——我
我试图通过aop在控制器中记录超文本传输协议请求。但是,在方面代码中,如果我 那么请求数据将无法在主流中检索。 所以,我创建了另一个公共方法,在控制器中传递请求字符串 这种方法是记录“数据”的切入点。 但问题是,这种方法的切入点似乎无法通过Spring识别,这种方法没有日志记录。我需要帮助。 下面是aop的定义
我正在使用在我的Android应用程序上发送HTTP POST请求。其中一个POST请求通过截击触发时返回。当通过rest客户端(Postman、curl)触发时,API返回。我怀疑通过截击发送的请求正文中有什么错误。 有没有办法记录volley在POST请求中发送的完整请求主体?我启用了,它确实记录了完整的响应,但它没有记录请求主体或URL。 请帮助我将HTTP请求的详细信息(url、请求正文等
问题内容: 我正在使用PyDev进行Python应用程序的开发和单元测试。至于单元测试,除了没有内容记录到日志记录框架这一事实之外,一切都可以正常工作。记录器未被PyDev的“捕获的输出”捕获。 我已经将记录的所有内容转发到标准输出,如下所示: 但是,“捕获的输出”不会显示记录到记录器的内容。 这是一个示例unittest-script: test.py 控制台输出为: 但是该测试的“ 捕获输出
看过本章第一节的同学应该还记得,log_by_lua* 是一个请求经历的最后阶段。由于记日志跟应答内容无关,Nginx 通常在结束请求之后才更新访问日志。由此可见,如果我们有日志输出的情况,最好统一到 log_by_lua* 阶段。如果我们把记日志的操作放在 content_by_lua* 阶段,那么将线性的增加请求处理时间。 在公司某个定制化项目中,Nginx 上的日志内容都要输送到 syslo