Java 全球会议+;身份验证,Jetty中的多个上下文
我似乎在Jetty 7中遇到了一个奇怪的问题,即作用域处理程序。我想要实现的是拥有一个身份验证页面(和一个会话),它可以保护多个Java 全球会议+;身份验证,Jetty中的多个上下文,java,jetty,Java,Jetty,我似乎在Jetty 7中遇到了一个奇怪的问题,即作用域处理程序。我想要实现的是拥有一个身份验证页面(和一个会话),它可以保护多个WebAppContexts。在我看来,明智的解决方案似乎是将所有Web应用程序放在ContextHandlerCollection中,并将其包装在SecurityHandler和SessionHandler中。然而,看看Jetty代码,在我看来,这永远无法正常工作。以下代码演示了核心问题: Server server = new Server(8000); Simp
WebAppContext
s。在我看来,明智的解决方案似乎是将所有Web应用程序放在ContextHandlerCollection
中,并将其包装在SecurityHandler
和SessionHandler
中。然而,看看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
,因为会话处理程序是最外层的作用域。问题是ContextHandlerCollection
不是作用域处理程序,因此nextScope
被设置为第一个ServletContextHandler
!在第二个ServletContextHandler
上不可能调用doScope
但是,即使是第一个servlet也无法访问<调用ServletHandler
中的code>doScope,最后调用外部作用域(会话处理程序)上的doHandle
,并将目标设置为/
。但是: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);
但我想你自己也知道了
再见如果我没弄错的话,我想这应该行得通:
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);
但我想你自己也知道了
再见你找到解决办法了吗?我正在尝试构造相同的“全局会话”拓扑。您找到解决方案了吗?我试图构建相同的“全局会话”拓扑。