java - 如何从 Jetty 处理程序转发到另一个 URL?

标签 java jetty handlers

在我们的 servlet 过滤器链中的某个地方,有一个过滤器,当发送 401 错误时,它会将请求转发到登录页面,作为可用性调整。

我正在尝试将其转换为 Jetty 处理程序,因为有人希望所有 Web 应用程序都通过相同的逻辑进行身份验证,而不是每个 Web 应用程序都必须实现自己的身份验证。

(我们首先使用过滤器方法的主要原因是没有人能够让 Jetty 的容器级身份验证正常工作 - 我们可以选择 Windows 身份验证或内置身份验证,并且希望能够在运行时在这些之间进行切换,但始终无法弄清楚如何使其与 Jetty 一起工作。)

在 Jetty 处理程序中,有一些如下逻辑:

private void handleErrorBetter(HttpServletRequest servletRequest,
                               HttpServletResponse servletResponse)
        throws ServletException, IOException {
    if (isPageRequest(servletRequest)) {
        ServletContext rootContext = servletRequest.getServletContext().getContext("/");
        RequestDispatcher dispatcher = rootContext.getRequestDispatcher("/sign_in");
        dispatcher.forward(servletRequest, servletResponse);
    } else {
        // ...
    }
}

servletRequest.getServletContext() 似乎正确返回了 / 的上下文。有趣的是,即使我请求不同的 web 应用程序,它似乎也会这样做,但根据 Javadoc,我必须使用 getContext("/") 来确保我获得根上下文,所以我正在这样做。

获取调度程序也成功。

然后我调用 forward(),这总是向客户端返回 404 响应。

如果我直接从网络浏览器访问 /sign_in,则会加载表单。

服务器上只有两个上下文:根上下文 / 和我用来测试第二个 Web 应用程序的 /sample/ 上下文。所以我知道 /sign_in 将位于根上下文中,但是为什么 forward() 在转发到它时给出 404 ?

最佳答案

结果证明这是一个错误。

https://bugs.eclipse.org/bugs/show_bug.cgi?id=386359

关于java - 如何从 Jetty 处理程序转发到另一个 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11680531/

相关文章:

jetty - 使用静态资源为jetty配置上下文路径

javascript - Javascript 范围问题

c# - 在 C# 中,如何轻松更改事件处理程序的名称?

java - 如何使用 Spring Boot 注册辅助 servlet?

java - 如何解决java.lang.NoSuchMethodError : org. hibernate.integrator.internal.IntegratorServiceImpl

java - 在Java中,如何在下载过程中统计网页的下载大小?

java - Jetty httpOnly cookies configurarion 就像在 Tomcat 上一样

java - GAE 项目类路径上的 Xerces JAR 导致 "SAXParserFactoryImpl not found"

php - 如何在 monolog 中使用 swiftmailer 处理程序

java - "for"函数对 ArrayList 的操作和异常 java.lang.ArrayIndexOutOfBoundsException