如何解决将 Jetty 配置为在 war 文件的 web.xml 运行中的过滤器之前运行自定义过滤器
我有一个在 Jetty 服务器上运行的第三方 .war 文件。我需要在 .war 文件的部署描述符中定义的过滤器运行之前运行代码以进行日志记录。代码需要有权访问传入的请求和响应对象以及为战争中的应用程序运行的记录器的上下文。
Jetty 的 xml 配置文件中有没有办法做到这一点?由于担心许可,我不想接触战争文件。
我可以覆盖部署描述符,这将允许我添加自定义过滤器,但我相信这些会在战争中的过滤器之后运行。我也可以使用请求定制器,但这并不能让我访问我也需要编辑的响应。
我尝试在带有运行战争的 org.eclipse.jetty.webapp.WebAppContext 的处理程序之前向 HandlerCollection 添加一个处理程序,但我似乎无权访问 Web 应用程序的记录器的上下文...>
有没有办法做到这一点?那么在 Web 应用程序的 servlet 执行之前运行一段可以访问传入请求和响应以及 Web 应用程序上下文的代码?
解决方法
选项 1:
要在生命周期的各个阶段访问原始 Request
和 Response
,请使用 HttpChannel.Listener
(确保您阅读 javadoc/apidoc 以了解每个事件的含义)。
选项 2:
要在 WebAppContext
中添加处理程序,在会话/安全处理之前,但在其他处理程序之后,使用 WebAppContext.insertHandler(HandlerWrapper)
。
选项 3:
创建一个表示您的 servlet Filter
的 web-fragment servlet jar,并将其添加到 WebAppContext.setExtraClassPath(String)
中,该 RequestLog
将被选取并添加到实际的 web 应用程序的启动中。
选项 4:
创建自定义 Server.setRequestLog(RequestLog)
实现(您将其添加到 RequestLog
中,一旦请求和响应完成,就会收到通知,因此您可以将请求/日志的状态记录到您想要的任何来源。
选项 5:
使用现有的 tune("variableID")
实现之一以所需的格式将所需的详细信息记录到控制台。 (看CustomRequestLog
和Slf4jRequestLogWriter
的组合)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。