getSession() всегда создает новую сессию

У нас есть класс SecurityFilter в нашем приложении путем реализации Filter, и наш метод doFilter выглядит следующим образом.

public void doFilter(ServletRequest sres, ServletResponse sreq,
            FilterChain chain) throws IOException, ServletException {

        LOGGER.debug(Logger.buildLogMessage("Starting SecurityFilter.doFilter"));
        HttpServletRequest request = (HttpServletRequest) sres;
        HttpServletResponse response = (HttpServletResponse) sreq;

        HttpSession session = request.getSession();

У нас есть следующая запись в нашем web.xml

<filter>
        <filter-name>SecurityFilter</filter-name>
        <filter-class>com.a.b.c.web.filter.SecurityFilter</filter-class>
</filter>

<filter-mapping>
        <filter-name>SecurityFilter</filter-name>
        <url-pattern>/resources/*</url-pattern>
</filter-mapping>

У нас много вызовов REST к нашему приложению, и все они проходят через этот фильтр. В документации Java API говорится, что request.getSession() возвращает сеанс, если он существует, иначе он создает новый сеанс. Но в нашем приложении request.getSession() всегда создает новый сеанс для каждого вызова REST. Что здесь может пойти не так?


person Veera    schedule 11.04.2014    source источник
comment
Начните с клиента и убедитесь, что он отправляет файл cookie JSESSIONID.   -  person Ted Bigham    schedule 11.04.2014
comment
Если клиент не отправляет файл cookie сеанса как часть своих запросов, сервер не может узнать, к какому сеансу относится запрос, и поэтому он воссоздает его.   -  person JB Nizet    schedule 11.04.2014
comment
Поддерживая сеанс, вы нарушаете одно из основных ограничений архитектуры REST.   -  person Anirudha    schedule 11.04.2014
comment
@ Анирудха, это неправда. Соединение не имеет состояния, а не сеанс.   -  person Ted Bigham    schedule 11.04.2014
comment
Понюхайте запрос/ответ, чтобы увидеть, есть ли файл cookie для последующих вызовов, например, предложенный @Ted.   -  person Leos Literak    schedule 11.04.2014
comment
@TedBigham Потребитель REST API — это скрипт Python, который опрашивает (каждые 15 м) из другой системы. Как сохранить файл cookie JSESSIONID в этом случае?   -  person Veera    schedule 11.04.2014
comment
Сценарий Python должен будет поддерживать состояние между вызовами. Так что это действительно похоже на вопрос о питоне, а не о java. Весело. stackoverflow .com/questions/923296/   -  person Ted Bigham    schedule 11.04.2014


Ответы (1)


Если в настройках вашего приложения задано отслеживание JSESSIONID с помощью файла cookie, приложение вернет тот же сеанс, если вы делаете запрос из того же браузера, и новый сеанс, если вы делаете запрос из другого браузера. Очевидно, это связано с тем, что файлы cookie существуют для каждого браузера отдельно.

person Kalepu Harish    schedule 27.06.2014