Как я могу загрузить Java HttpSession из JSESSIONID? - PullRequest
13 голосов
/ 22 июня 2010

Я хочу получить Java HttpSession по JSESSIONID.Является ли это возможным?Если да, то как?

Ответы [ 3 ]

29 голосов
/ 22 июня 2010

Вам нужно собрать их все в 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 на стороне клиента? Подробно расскажите об этом в новом вопросе, и вы получите ответы о том, как сделать это правильно.

Относись серьезно. Мы не дразним вас, мы просто пытаемся помочь вам в правильном направлении, чтобы ваш проект / веб-приложение не сломалось из-за дыр в безопасности и плохой практики и / или что вас уволят.

2 голосов
/ 22 июня 2010

Нет, API не разрешает этого.

Я бы сказал больше, но это все, что нужно.

1 голос
/ 23 июня 2010

Вы можете сделать это, как указано выше, но существование такого средства является prima facie нарушением безопасности между различными пользователями. Вы не должны встраивать подобные вещи в свое приложение.

...