Вам нужно собрать их все в Map
, используя HttpSessionListener
самостоятельно.
public class HttpSessionCollector implements HttpSessionListener {
private static final Map<String, HttpSession> sessions = new HashMap<String, HttpSession>();
@Override
public void sessionCreated(HttpSessionEvent event) {
HttpSession session = event.getSession();
sessions.put(session.getId(), session);
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
sessions.remove(event.getSession().getId());
}
public static HttpSession find(String sessionId) {
return sessions.get(sessionId);
}
}
Просто зарегистрируйте его в web.xml
следующим образом:
<listener>
<listener-class>com.example.HttpSessionCollector</listener-class>
</listener>
Затем в любом месте, где вы хотите, просто наберите HttpSessionCollector.find(sessionId)
, чтобы получить HttpSession
в вопросе.
Тем не менее, это огромный запах. Конечно, есть более эффективные способы решения фактических функциональных требований, чем это;) Как я прокомментировал в вашем последующем вопросе :
Это второй раз, когда вы задали вопрос, который в реальном мире никогда не должен практиковаться. Честно говоря, это все пахнет. Что это, проблема, для которой вы думаете, что "*" является решением проблемы получения HttpSession
, связанного с JSESSONID на стороне сервера, и получения значения JSESSIONID на стороне клиента? Подробно расскажите об этом в новом вопросе, и вы получите ответы о том, как сделать это правильно.
Относись серьезно. Мы не дразним вас, мы просто пытаемся помочь вам в правильном направлении, чтобы ваш проект / веб-приложение не сломалось из-за дыр в безопасности и плохой практики и / или что вас уволят.