java - 登录嵌入式 Jetty 9.4.12 后不处理 REST 请求
问题描述
我正在尝试从嵌入式码头服务器记录请求正文。
我成功获得了 POST 请求的正文(主要来自https://stackoverflow.com/a/19547549/8916463和https://stackoverflow.com/a/8972088/8916463)
public class JettyFilter {
public static void main(final String[] args) throws Exception {
Server server = new Server(8080);
ServletHandler handler = new ServletHandler();
server.setHandler(handler);
handler.addServletWithMapping(HelloServlet.class, "/*");
handler.addFilterWithMapping(WebServerLoggingFilter .class, "/*",
EnumSet.of(DispatcherType.REQUEST));
server.start();
server.join();
}
public static class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(request.getReader().lines()
.collect(Collectors.joining(System.lineSeparator())));
}
}
public static class WebServerLoggingFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("hello from filter");
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
@Override
public void destroy() {}
}
}
问题是,当我以这种方式配置服务器时,根本不会调用来自控制器的 POST 请求。但是当我尝试使用 NCSA 日志记录时,它们会被正确调用,(在这种情况下,请求正文不会被记录):
NCSARequestLog requestLog = new NCSARequestLog(os.getDatedFilename());
requestLog.setExtended(true);
RequestLogHandler requestLogHandler = new RequestLogHandler();
requestLogHandler.setRequestLog(requestLog);
requestLog.setAppend(true);
HandlerList mainHandlers = new HandlerList();
mainHandlers.addHandler(accessHandler);
mainHandlers.addHandler(new DefaultHandler());
requestLogHandler.setHandler(mainHandlers);
HandlerList topLevelHandlers = new HandlerList();
topLevelHandlers.addHandler(requestLogHandler);
server.setHandler(topLevelHandlers);
我的目标是将请求的正文记录到某个文件中。
显然我错过了一些非常简单的东西,请求正文的日志记录可以更容易实现。
PS。不使用弹簧。
任何帮助将不胜感激!
解决方案
推荐阅读
- reactjs - 如何添加 svg 图像以便在悬停时突出显示
- sql - 有没有办法确定在某一行中哪个字符串显示最多?
- python - Pyvmomi API _mor.TerminateVM 抛出 pyVmomi.VmomiSupport.NotSupported: (vmodl.fault.NotSupported)
- elixir - 当我们应该在 .exs 文件中使用 defmodule
- python - 是否可以将 numpy 数组转换为 csv 文件,然后将其作为 numpy 数组加载回来?
- azure - Terraform - 从值列表创建对象列表
- node.js - 在发送机器人框架 v4 Nodejs 之前拦截机器人消息
- azure - 在 Powershell 中使用从 AzureRmContext 获取的令牌后,AD 图 API 的访问令牌验证失败
- c - 尝试为 STM32 构建自定义 micropython 固件时出现问题
- css - 反应样式的组件未显示在屏幕上