首页 > 解决方案 > 登录嵌入式 Jetty 9.4.12 后不处理 REST 请求

问题描述

我正在尝试从嵌入式码头服务器记录请求正文。

我成功获得了 POST 请求的正文(主要来自https://stackoverflow.com/a/19547549/8916463https://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。不使用弹簧。

任何帮助将不胜感激!

标签: javarestloggingjetty

解决方案


推荐阅读