Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > проблема HttpSession в glassfish


Автор: temonix 20.7.2008, 11:52
Мы используем HttpSession для авторизации и аутификации клиентов. Все достаточно хорошо работает. Но в последнее время начала появляться ошибка. Если несколько клиентов работает за натом ( под одним ip ), то в случае, когда идут параллельно 2 запроса, HttpSession выдает данные не соответствующие пользователю. Конкретный пример:

Код

Person person = (Person) getSessionParam( request, "person");
person = personBean.refresh(person);

где person - POJO объект ( отсоединенный от JPA контейнера, т.к. выполняется этот код в сервлете ),
 getSessionParam - наследованный метод
Код

     protected Object getSessionParam( HttpServletRequest request, String key ) throws ServletException {
        Object param = request.getSession().getAttribute(key);
        if ( param == null ) {
            throw new ServletException("Параметра сессии не существует");
        }
        return param;
    }

Как видно, никаких разделяемых ресурсов здесь нет. 
Код

    public Person refresh(Person person) {
        em.refresh(person);
        return person;
    }

Требуется для обновления информации о персоне, которая меняется от запроса к запросу

Тем не менее метод getSessionParam( request, "person" ) возвращает не своего персона, тогда как GET параметры идут правильные. Это приводит к тому, что транзакция идет не под именем человека, который ее проводит. 

Это проблема glassfish ? Если так, то мы эту проблему решим хранением в cookie id персоны и сравнением при каждом запросе. Это костыль, не хочется делать

Это проблема в нашем коде ? Куда копать?

Автор: jokodzuma 20.7.2008, 14:32
1. описанная ситуация происходит когда пользователь уже авторизовался?
2. может, это не в тему, но все же:
http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/Servlet-Tutorial-CGI-Variables.html
http://coding.derkeiler.com/Archive/Perl/comp.lang.perl.misc/2006-06/msg01562.html
т.е. что-то вроде request.getHeader("HTTP_X_FORWARDED_FOR")

Автор: jokodzuma 21.7.2008, 16:13
Цитата(temonix @ 20.7.2008,  11:52)
Куда копать?

или сюда -> HttpServletResponse.encodeURL(String)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)