Jak ręcznie załadować sesję Java przy użyciu JSESSIONID?
Mam serwlet, który obsługuje post wieloczęściowy. Post jest w rzeczywistości tworzony przez komponent do przesyłania plików Flash osadzony na stronie. W niektórych przeglądarkach generowany przez Flash POST nie zawiera JSESSIONID, który uniemożliwia mi załadowanie pewnych informacji z sesji podczas postu.
Komponent wysyłania flash zawiera informacje o plikach cookie i sesjach w specjalnym polu formularza. Korzystając z tego pola formularza, mogę faktycznie pobrać wartość JSESSIONID. Problem polega na tym, że nie wiem, jak użyć tej wartości JSESSIONID do ręcznego ładowania tej konkretnej sesji.
Edytować - Na podstawie rozwiązania ChssPly76 stworzyłem następująceHttpSessionListener realizacja:
@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());
}
Który dodaje wszystkie sesje doServletContext jako atrybuty odwzorowane przez ich unikalne identyfikatory. Mogę zamiast tego umieścić mapę sesji w kontekście, ale wydaje się to zbędne. Proszę zamieścić jakiekolwiek przemyślenia na temat tej decyzji. Następnie dodaję następującą metodę do mojego serwletu, aby rozwiązać sesję według identyfikatora:
private HttpSession getSession(final String sessionId) {
final ServletContext context = getServletContext();
final HttpSession session = (HttpSession) context.getAttribute(sessionId);
return session;
}