java - 全局 session +身份验证,Jetty中的多个上下文

标签 java jetty

我似乎在 Jetty 7 中的作用域处理程序中遇到了一个奇怪的问题。我想要实现的是拥有单个身份验证页面(和单个 session ),它可以保护多个 WebAppContext 。在我看来,明智的解决方案是将所有 Web 应用程序放入 ContextHandlerCollection 中,并将其包装在 SecurityHandlerSessionHandler 中。然而,查看 Jetty 代码,在我看来,这永远无法正常工作。下面的代码演示了核心问题:

Server server = new Server(8000);

SimpleServlet h1 = new SimpleServlet("Servlet 1");
SimpleServlet h2 = new SimpleServlet("Servlet 2");

ServletContextHandler c1 = new ServletContextHandler();
ServletContextHandler c2 = new ServletContextHandler();

c1.addServlet(new ServletHolder(h1), "/");
c2.addServlet(new ServletHolder(h2), "/");

c1.setContextPath("/context1");
c2.setContextPath("/context2");

ContextHandlerCollection chc = new ContextHandlerCollection();
chc.setHandlers(new Handler[]{c1, c2});

SessionHandler sh = new SessionHandler();
sh.setHandler(chc);

server.setHandler(sh);

当请求传入时,最终会到达 SessionHandler 中的 handle。这里,调用了doScope,因为 session 处理程序是最外层的作用域。问题是 ContextHandlerCollection 不是作用域处理程序,因此 nextScope 设置为第一个 ServletContextHandler!不可能在第二个 ServletContextHandler 上调用 doScope

但是,即使第一个 servlet 也无法访问。调用 ServletHandler 中的 doScope,并最终在外部作用域( session 处理程序)上调用 doHandle,并将 target 设置为 /。但是:ContextHandlerCollection 不知道名为 / 的上下文,因此结果是 404。

我在这里缺少什么?

最佳答案

如果我理解正确,我想这应该可行:

Server server = new Server(8000);

SimpleServlet h1 = new SimpleServlet("Servlet 1");
SimpleServlet h2 = new SimpleServlet("Servlet 2");

ServletContextHandler c = new ServletContextHandler();
c.setContextPath("/");
c.addServlet(new ServletHolder(h1), "/context1");
c.addServlet(new ServletHolder(h2), "/context2");

SessionHandler sh = new SessionHandler();
sh.setHandler(c);

server.setHandler(sh);

但我猜你当时已经自己弄清楚了......

再见

关于java - 全局 session +身份验证,Jetty中的多个上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32376104/

相关文章:

java - 使用 Java 和 Node.js 创建 Docker 容器

java - 使用 requiresUnpack 使用 Maven 构建的 Spring Boot JAR 不起作用

java - Jetty 和 Netty 集成

java - 如何将tomcat web应用迁移到jetty

jetty - "Jetty 6 Continuations"是什么?它们与编程语言中的延续相比如何?

java - 如何在一个 hashmap 上设置 2 个迭代器

java - 为什么下面的代码不起作用?

java - 我在 Spring 使用加载时间编织。我如何在 jetty 中设置类加载器?

java - 发生内存不足错误

java - 当请求 Content-Type 为 gzip 时,Jetty 响应 400 Bad Request