gpt4 book ai didi

java - 如何让 Servlet Filter 处理嵌入式 Jetty 中的欢迎文件?

转载 作者:行者123 更新时间:2023-12-02 08:48:24 25 4
gpt4 key购买 nike

我有一个在嵌入式 jetty 9.4.12 上运行的应用程序。 ServletContextHandler 对象用于设置欢迎文件以及在将处理程序设置为 Server 对象之前添加 servlet 过滤器。添加的过滤器列表包括对传入请求执行身份验证的某些过滤器。但是,这些过滤器不会在欢迎页面上触发,但它们可以在其他端点上运行。

相关服务器初始化代码:

ServletContextHandler root = new ServletContextHandler(ServletContextHandler.SESSIONS);
root.setInitParameter("org.eclipse.jetty.servlet.Default.dirAllowed", "false");
root.setInitParameter("org.eclipse.jetty.servlet.Default.redirectWelcome", "true");
root.setWelcomeFiles(new String[]{"welcome.html"});
FilterHolder filterHolder = new FilterHolder(
new AuthFilter());
root.addFilter(filterHolder, "/*", null);
HandlerList handlerList = new HandlerList();
handlerList.setHandlers(
new Handler[]{root)
}
);
server.setHandler(handlerList);

有没有办法让 AuthFilter servlet 过滤器在 welcome.html 页面上工作?

最佳答案

AuthFilter 将为您的配置中的两个请求执行。

示例:

  1. 您向 /path/to/content/ 发出 GET 请求
  2. 此请求的匹配 servlet 是 DefaultServlet
  3. 调用 AuthFilter,然后调用 DefaultServlet(假设您允许链接工作)
  4. DefaultServlet 检测到这是一个目录请求(并且 dirAllowed 为 false),因此它使用欢迎列表并发出重定向响应(因为您有 redirectWelcome 设置为 true)。 (此行为假设 /path/to/content/welcome.html 实际存在,否则这是 404 响应)
302 Found HTTP/1.1
Location: /path/to/content/welcome.html
  • 客户端遵循重定向并向 /path/to/content/welcome.html 发出 GET 请求
  • 此请求的匹配 servlet 是 DefaultServlet
  • 调用 AuthFilter,然后调用 DefaultServlet(假设您允许链接工作)
  • DefaultServlet 检测到这是一个文件资源并返回其内容。
  • 您的 AuthFilter 被调用两次,一次用于第 3 步,另一次用于第 7 步。

    关于java - 如何让 Servlet Filter 处理嵌入式 Jetty 中的欢迎文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60938561/

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