我有一个使用Jetty 8.1.8的应用程序(我现在无法将其升级到最新的9.4,尽管我也尝试了最新的8.1.22)作为嵌入式服务器以编程方式启动。它已经很好用了好几年了,直到现在我们还没有改变任何一个,但是我们现在需要基本的用户会话,所以我们添加它。
不幸的是,当我们尝试提取会话以在HttpSession session = request.getSession(true);
的处理程序中使用它时,我们得到以下异常:
java.lang.IllegalStateException: No SessionManager
at org.eclipse.jetty.server.Request.getSession(Request.java:1270)
我已经挖掘了所有文档和许多SO帖子,例如this和this,并且在不抛出上述异常的情况下无法使用此功能。
以下是我们在尝试添加会话的许多变体之后正在使用的代码。
Server server = new Server(Port);
server.setGracefulShutdown(5000);
server.setStopAtShutdown(true);
HandlerCollection handlers = new HandlerCollection();
// MainHandler inherits from Jetty's AbstractHandler and just contains a couple of additional simple variables that get updated when `handle` is called
MainHandler main = new MainHandler(...);
// *** Session additions begin here
HashSessionIdManager idManager = new HashSessionIdManager();
server.setSessionIdManager(idManager);
HashSessionManager sessionManager = new HashSessionManager();
SessionHandler sessions = new SessionHandler(sessionManager);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
context.setHandler(sessions);
handlers.setHandlers(new Handler[] { main, context });
// *** Session additions end here
server.setHandler(handlers);
//server.setHandler(main); // this is how it was set previously
server.start();
有没有人对这可能有什么问题有所了解?希望这是我们忽略的简单事物。