He encontrado muchas referencias a este problema en google, pero no hay respuestas. Estoy usando la última versión de jetty (8.1.2.v20120308) y parece que no puedo obtener un servlet incrustado para poder utilizar las sesiones. El ejemplo está en scala, por supuesto, pero debería ser legible para cualquier programador de Java.Jetty incrustado - IllegalStateException: No SessionManager
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()
en mi código servlet:
...
log.debug("session manager: {}",req.asInstanceOf[Request].getSessionManager)
val session = req.getSession
...
El req.getSession lanza esta excepción, y la línea de depuración antes de que, siempre es nula.
java.lang.IllegalStateException: No SessionManager
at org.eclipse.jetty.server.Request.getSession(Request.java:1173)
En el registro que se puede ver esto:
DEBUG org.eclipse.jetty.server.session - ses[email protected]2a8ceeea
DEBUG org.eclipse.jetty.server.session - session=null
No estoy seguro de si eso es relevante, pero parece que hay un gestor de sesiones, pero que no está disponible a petición.
He intentado esto con el WebAppContext con el mismo resultado. Sin mencionar explícitamente la configuración del sessionManager de una docena de maneras diferentes.
Gracias por la respuesta, pero yo he probado ambas variantes, sin éxito. También intenté agregar HashSessionManager explícitamente a SessionHandler, pero no importa lo que intente, el embarcadero Request.getSession() siempre arroja IllegalStateException. La salida de registro de embarcadero muestra que existe un administrador de sesión, simplemente parece que está disponible en la solicitud. –
Michael, mirando el código de Jetty, la única forma en que pude ver que esto sucedía es que ningún SessionHandler está asociado e inicializado en la solicitud. ¿Tiene algún tipo de autenticación en su web.xml? –
Estaba teniendo el mismo problema, y una pequeña variante de la respuesta de BGR me funcionó, simplemente agregué un nuevo manejador de sesión a mi manejador de contexto de servlet directamente sin crear un WebAppContext y funcionó bien. servletContextHandler.setSessionHandler (new SessionHandler()) –