Кажется, у меня запуталась странная проблема с обработчиками областей в Jetty 7. То, что я хочу достичь, - это иметь одну страницу аутентификации (и один сеанс), которая защищает несколько WebAppContext
s. Разумное решение показало мне, что все webapps в ContextHandlerCollection
и обернуть это в SecurityHandler
и SessionHandler
. Однако, глядя на код Jetty, мне кажется, что это никогда не сработает. Следующий код демонстрирует основную проблему:Глобальная сессия + аутентификация, несколько контекстов в 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);
Когда приходит запрос, это заканчивается в handle
в SessionHandler
. Здесь вызывается doScope
, поскольку обработчик сеанса является самой внешней областью. Проблема в том, что ContextHandlerCollection
не является обработчиком с областями, поэтому nextScope
настроен на первое ServletContextHandler
! Нет никакого способа, чтобы doScope
когда-либо вызывался на второй ServletContextHandler
.
Но даже этот первый сервлет недоступен. doScope
в ServletHandler
вызывается и заканчивается вызовом doHandle
на внешней области (обработчик сеанса) с target
, установленным на /
. Но: ContextHandlerCollection
не знает контекста под названием /
, поэтому результат равен 404.
Что мне здесь не хватает?
ли вы найти решение ? Я пытаюсь построить ту же топологию «глобальной сессии». – Ramazan