java - La gestión de la sesión es Dropwizard 0.8.x
session jersey (2)
La razón por la que esto no funciona para usted es porque necesita establecer la cookie en la respuesta. Me di cuenta de esto mientras buscaba habilitar el estado de la sesión para una aplicación dropwizard donde la cookie subyacente se crea en el objeto Jetty Response pero nunca llega al objeto Jersey Response y, por lo tanto, se descarta.
Lo que he hecho para solucionar este problema es implementar un filtro que extraiga la información "Set-Cookie" de Jetty y la ponga en el objeto de respuesta de salida.
String cookie = HttpConnection.
getCurrentConnection()
.getHttpChannel()
.getResponse()
.getHttpFields().get(HttpHeader.SET_COOKIE.asString());
if (LOG.isDebugEnabled()) {
LOG.debug("Adding session cookie to response for subsequent requests {}", cookie);
}
httpServletResponse.addHeader(HttpHeader.SET_COOKIE.asString(), cookie);
¿Puede alguien darme una idea de cómo implemento la gestión de sesiones en Dropwizard 0.8.xo superior? Estaba usando Dropwizard 0.7.0 hasta ahora y estoy trabajando perfectamente en él. Pero realmente me confundí con los documentos de cambio proporcionados cuando migré a 0.8.x.
En Dropwizard 0.7.0 (que estaba usando previamente) se hizo como el siguiente
/*MainApplication.class session handler */
environment.jersey().register(HttpSessionProvider.class);
environment.servlets().setSessionHandler(new SessionHandler());
/*Resource.class session check*/
HttpSession session = httpServletRequest.getSession(true);
Pero parece que ya no funciona, y dice precisamente que HttpSessionProvider.class no está allí y es reemplazado por otras implementaciones.
Sería realmente útil que alguien muestre a qué se cambia esto. Gracias.
@Yashwanth Krishnan
Sé que esto es antiguo, pero me di cuenta de que la sesión no se mantenía desde una URL a otra, simplemente agrega este código cuando inicies la aplicación, el manejo de la sesión es principalmente un contenedor y no específico de DropWizard.
SessionHandler sessionHandler = new SessionHandler();
sessionHandler.getSessionManager().setMaxInactiveInterval(SOME_NUMBER);
/**
* By default the session manager tracks sessions by URL and Cookies, we
* want to track by cookies only since
* we are doing a validation on all the app not URL by URL.
*/
sessionHandler.getSessionManager().setSessionTrackingModes(EnumSet.of(SessionTrackingMode.COOKIE));
environment.servlets().setSessionHandler(sessionHandler);