【问题标题】:How to get ServletFilter to work on welcome files in embedded Jetty?如何让 ServletFilter 处理嵌入式 Jetty 中的欢迎文件?
【发布时间】:2020-07-11 07:04:29
【问题描述】:

我有一个在嵌入式码头 9.4.12 上运行的应用程序。在将处理程序设置为Server 对象之前,ServletContextHandler 对象用于设置欢迎文件以及添加 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 页面上工作?

【问题讨论】:

    标签: java servlets jetty servlet-filters embedded-jetty


    【解决方案1】:

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

    例子:

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

    您的AuthFilter 被调用了两次,一次用于第 3 步,一次用于第 7 步。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 2020-06-23
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      相关资源
      最近更新 更多