Ho un servlet che gestisce un post di modulo multiparte. Il post viene effettivamente creato da un componente di caricamento di file Flash incorporato nella pagina. In alcuni browser, il POST generato da Flash non include JSESSIONID che mi impedisce di caricare determinate informazioni dalla sessione durante il post.Come posso caricare manualmente una sessione Java usando un JSESSIONID?
Il componente di caricamento flash include informazioni su cookie e sessione all'interno di un campo modulo speciale. Utilizzando questo campo modulo, posso effettivamente recuperare il valore JSESSIONID. Il problema è che non so come usare questo valore JSESSIONID per caricare manualmente quella specifica sessione.
Edit - Sulla base di soluzione di ChssPly76, ho creato il seguente HttpSessionListener implementazione:
@Override
public void sessionCreated(final HttpSessionEvent se) {
final HttpSession session = se.getSession();
final ServletContext context = session.getServletContext();
context.setAttribute(session.getId(), session);
}
@Override
public void sessionDestroyed(final HttpSessionEvent se) {
final HttpSession session = se.getSession();
final ServletContext context = session.getServletContext();
context.removeAttribute(session.getId());
}
che aggiunge tutte le sessioni al ServletContext come attributi mappati dai loro ID univoci. Potrei inserire una mappa di sessioni nel contesto, ma sembra ridondante. Si prega di postare qualsiasi pensiero su questa decisione. Successivamente, ho aggiungere il seguente metodo alla mia servlet per risolvere la sessione ID:
private HttpSession getSession(final String sessionId) {
final ServletContext context = getServletContext();
final HttpSession session = (HttpSession) context.getAttribute(sessionId);
return session;
}
+1 .. molto bella domanda – peakit