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
Започнете с клиента и се уверете, че изпраща бисквитка JSESSIONID.   -  person Ted Bigham    schedule 11.04.2014
comment
Ако клиентът не изпрати сесийната бисквитка като част от своите заявки, сървърът няма начин да знае към коя сесия принадлежи заявката и по този начин създава такава.   -  person JB Nizet    schedule 11.04.2014
comment
Като поддържате сесия, вие нарушавате едно от основните ограничения на REST архитектурата   -  person Anirudha    schedule 11.04.2014
comment
@Anirudha това не е вярно. Връзката е без състояние, а не сесията.   -  person Ted Bigham    schedule 11.04.2014
comment
Подушете заявката/отговора, за да видите дали бисквитката е там за последващи обаждания, както @Ted предложи.   -  person Leos Literak    schedule 11.04.2014
comment
@TedBigham Потребителят на REST API е скрипт на Python, който анкетира (на всеки 15 м) от различна система. Как да поддържам бисквитка JSESSIONID в този случай?   -  person Veera    schedule 11.04.2014
comment
Скриптът на Python ще трябва да поддържа състояние между извикванията. Така че това наистина изглежда като въпрос за python, а не за java. забавление. stackoverflow .com/questions/923296/   -  person Ted Bigham    schedule 11.04.2014


Отговори (1)


Ако настройките на вашето приложение са настроени да проследяват JSESSIONID чрез бисквитка, приложението ще върне същата сесия, ако правите заявка от същия браузър, и нова сесия, ако правите заявка от различен браузър. Това очевидно е така, защото бисквитките съществуват на базата на браузър.

person Kalepu Harish    schedule 27.06.2014