Embedded Jetty - IllegalStateException: нет SessionManager - PullRequest
10 голосов
/ 25 марта 2012

Я нашел много ссылок на эту проблему в Google, но ответов нет.Я использую последнюю версию Jetty (8.1.2.v20120308), и я не могу получить встроенный сервлет для использования сессий.Пример приведен в Scala, но он должен быть читаем любым программистом Java.

val server = new Server();
val connector = new SelectChannelConnector()
connector.setPort(Integer.getInteger("jetty.port", 8080).intValue())
server.setConnectors(Array(connector))

val webapp = new ServletContextHandler(ServletContextHandler.SESSIONS)
webapp.setContextPath("/")
webapp.setResourceBase(webDir)
webapp.setServer(server)

val brzyServ = new ServletHolder(new BrzyDynamicServlet())
webapp.addServlet(brzyServ, "*.brzy")

server.setHandler(webapp);
server.start()

в коде моего сервлета:

...
log.debug("session manager: {}",req.asInstanceOf[Request].getSessionManager)
val session = req.getSession
...

req.getSession выдает это исключение, и строка отладки перед ним всегда равна нулю.

java.lang.IllegalStateException: No SessionManager
at org.eclipse.jetty.server.Request.getSession(Request.java:1173)

В журнале я вижу это:

DEBUG org.eclipse.jetty.server.session - sessionManager=org.eclipse.jetty.server.session.HashSessionManager@2a8ceeea
DEBUG org.eclipse.jetty.server.session - session=null

Я не уверен, что это актуально, но может показаться, что есть менеджер сеансов, но он недоступен назапрос.

Я пробовал это с WebAppContext с тем же результатом.Не говоря уже о явной настройке sessionManager дюжиной разных способов.

Ответы [ 3 ]

11 голосов
/ 26 марта 2012

Я полагаю, что проблема заключается в том, что вы создаете ServletContextHandler, а не WebappContext

Попробуйте

val webapp = new WebappContext();

или

val webapp = new ServletContextHandler(ServletContextHandler.SESSIONS)
webapp.setSessionHandler(new SessionHandler())

Из javadoc ServletContextHandler

 [...]construction of a context with ServletHandler and optionally session and security handlers [...]

Слово optionally, вероятно, является ключевым здесь.

0 голосов
/ 31 августа 2017

В Jetty 9.4, чтобы включить очень простой обработчик сеанса для обработчика сервлета:

private static void setSessionEnableContext( Server server,ServletHandler handlerServlet ) {
      // Specify the Session ID Manager        
    SessionIdManager idmanager = new DefaultSessionIdManager(server);
    server.setSessionIdManager(idmanager);
   // Specify the session handler
    SessionHandler sessionsHandler = new SessionHandler();       
    handlerServlet.setHandler(sessionsHandler);           
}
0 голосов
/ 27 марта 2012

хорошо, я чувствую себя немного глупо, эта проблема была в моем сервлете, я обращался к запросу в дочернем потоке, который обращался к сеансу, когда запрос вышел из области видимости.И, найдя ошибку, она отправила меня по неверному пути, потому что сообщение об ошибке было немного расплывчатым.Спасибо BGR за ответ.

...