gpt4 book ai didi

java - 如何过滤所有传入请求而不仅仅是映射到 servlet 的请求?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:57:04 25 4
gpt4 key购买 nike

我正在研究嵌入式 Jetty,我想知道为什么我的过滤器拦截/hi 而不是任何其他传入请求。这是我的示例案例:

没有过滤器:

localhost:8080/hi
=> "Hello"
localhost:8080/foo
=> 404

带过滤器:

localhost:8080/hi
=> "Hello from filter"
localhost:8080/foo
=> 404

我希望最后的 404 返回“Hello from filter”。我错过了什么?

Server server=new Server(8080);

ServletContextHandler context=
new ServletContextHandler(ServletContextHandler.SESSIONS);

context.setContextPath("/");
context.addFilter(DispatchFilter.class,"/*",1);
context.addServlet(HelloServlet.class,"/hi");

server.setHandler(context);
server.start();
server.join();

为了进一步说明,我的示例只是我想做的事情的简化表示。我的意图是让 DispatchFilter 拦截每个请求。如果不满足某个条件,那么它应该继续,否则返回从请求路径派生的东西。

最佳答案

来自 javax.servlet.Filter.doFilter()

The doFilter method of the Filter is called by the container each time a request/response pair is passed through the chain due to a client request for a resource at the end of the chain.

这里的关键部分是关于“链的末端”的部分。由于/foo 与实际资源不匹配,因此不会执行过滤器。

您可以通过添加默认 servlet 来解决此问题:

context.addServlet(org.mortbay.jetty.servlet.DefaultServlet, "/");

现在您的所有请求都有一个有效的端点,您的过滤器将被执行。

关于java - 如何过滤所有传入请求而不仅仅是映射到 servlet 的请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5031072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com