J'ai une servlet qui gère un poste de forme multipart. La publication est en fait effectuée par un composant de téléchargement de fichier Flash intégré dans la page. Dans certains navigateurs, le POST généré par Flash n'inclut pas le JSESSIONID qui me rend impossible de charger certaines informations de la session pendant la publication.Comment charger manuellement une session Java à l'aide d'un JSESSIONID?
Le composant de téléchargement flash inclut des informations de cookie et de session dans un champ de formulaire spécial. En utilisant ce champ de formulaire, je peux réellement récupérer la valeur JSESSIONID. Le problème est, je ne sais pas comment utiliser cette valeur JSESSIONID pour charger manuellement cette session spécifique.
Edition - Sur la base de la solution de ChssPly76, j'ai créé le suivant HttpSessionListener mise en œuvre:
@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());
}
Ce qui ajoute à toutes les séances au ServletContext comme attributs cartographiés par leurs ids uniques. Je pourrais plutôt mettre une carte de sessions dans le contexte, mais cela semble redondant. S'il vous plaît poster des réflexions sur cette décision. Ensuite, ajouter la méthode suivante à mon servlet pour résoudre la session par ID:
private HttpSession getSession(final String sessionId) {
final ServletContext context = getServletContext();
final HttpSession session = (HttpSession) context.getAttribute(sessionId);
return session;
}
+1 .. très belle question – peakit