在 war 文件的 web.xml 运行 中的过滤器之前将 Jetty 配置为 运行 自定义过滤器
Configure Jetty to run a custom filter before filters in war file's web.xml run
我在 Jetty 服务器上 运行 有一个第三方 .war 文件。在 .war 文件的部署描述符 运行 中定义的过滤器之前,我需要 运行 用于记录目的的代码。代码需要能够访问传入请求和响应对象,以及 war.
中应用程序 运行 的记录器上下文
有没有办法在 Jetty 的 xml 配置文件中执行此操作?由于对许可的担忧,我不想触摸 war 文件。
我可以覆盖允许我添加自定义过滤器的部署描述符,但我相信这些会在 war 中的过滤器之后 运行。我也可以使用请求定制器,但这并不能让我访问我还需要编辑的响应。
我尝试在 运行 和 war 的 org.eclipse.jetty.webapp.WebAppContext 处理程序之前向 HandlerCollection 添加一个处理程序,但我似乎无法访问 Web 应用程序的记录器的上下文...
有什么办法吗?那么在 Web 应用程序的 servlet 执行之前 运行 一段可以访问传入请求和响应以及 Web 应用程序上下文的代码?
选项 1:
要在其生命周期的各个阶段访问原始 Request
和 Response
,请使用 HttpChannel.Listener
(确保您阅读 javadoc/apidoc 以了解每个事件意味着)。
选项 2:
要在 WebAppContext
中添加处理程序,在 Session/Security 处理之前,但在其他处理程序之后,请使用 WebAppContext.insertHandler(HandlerWrapper)
.
选项 3:
创建一个代表您的 servlet Filter
的 web-fragment servlet jar,并将其添加到 WebAppContext.setExtraClassPath(String)
,它将被拾取并添加到实际的 webapp 的启动中。
选项 4:
创建一个自定义 RequestLog
实现(添加到 Server.setRequestLog(RequestLog)
,一旦请求和响应完成就会收到通知,因此您可以将 request/log 的状态记录到任何你想要的来源。
选项 5:
使用现有的 RequestLog
实现之一以您想要的格式将您想要的详细信息记录到控制台。 (看CustomRequestLog
and Slf4jRequestLogWriter
的组合)
我在 Jetty 服务器上 运行 有一个第三方 .war 文件。在 .war 文件的部署描述符 运行 中定义的过滤器之前,我需要 运行 用于记录目的的代码。代码需要能够访问传入请求和响应对象,以及 war.
中应用程序 运行 的记录器上下文有没有办法在 Jetty 的 xml 配置文件中执行此操作?由于对许可的担忧,我不想触摸 war 文件。
我可以覆盖允许我添加自定义过滤器的部署描述符,但我相信这些会在 war 中的过滤器之后 运行。我也可以使用请求定制器,但这并不能让我访问我还需要编辑的响应。
我尝试在 运行 和 war 的 org.eclipse.jetty.webapp.WebAppContext 处理程序之前向 HandlerCollection 添加一个处理程序,但我似乎无法访问 Web 应用程序的记录器的上下文...
有什么办法吗?那么在 Web 应用程序的 servlet 执行之前 运行 一段可以访问传入请求和响应以及 Web 应用程序上下文的代码?
选项 1:
要在其生命周期的各个阶段访问原始 Request
和 Response
,请使用 HttpChannel.Listener
(确保您阅读 javadoc/apidoc 以了解每个事件意味着)。
选项 2:
要在 WebAppContext
中添加处理程序,在 Session/Security 处理之前,但在其他处理程序之后,请使用 WebAppContext.insertHandler(HandlerWrapper)
.
选项 3:
创建一个代表您的 servlet Filter
的 web-fragment servlet jar,并将其添加到 WebAppContext.setExtraClassPath(String)
,它将被拾取并添加到实际的 webapp 的启动中。
选项 4:
创建一个自定义 RequestLog
实现(添加到 Server.setRequestLog(RequestLog)
,一旦请求和响应完成就会收到通知,因此您可以将 request/log 的状态记录到任何你想要的来源。
选项 5:
使用现有的 RequestLog
实现之一以您想要的格式将您想要的详细信息记录到控制台。 (看CustomRequestLog
and Slf4jRequestLogWriter
的组合)