HttpConnection, поддерживающий сеанс

Я использую некоторые веб-сервисы, выполненные в java, с использованием архитектуры Rest, мой клиент - это мобильное приложение, которое использует HttpConnection для извлечения данных. Чтобы контролировать аутентификацию и авторизацию, я использую файлы cookie, управляемые классом @SessionScoped, однако я не знаю, как сделать так, чтобы сеанс сохранялся через запросы. Проблема в основном заключается в том, что я внедряю диспетчер сеансов в другие службы, которые @RequestScoped, однако, поскольку сеанс не сохраняется, я всегда получаю разные экземпляры для класса @SessionScoped, таким образом удаляя все файлы cookie или записи, которые у меня были раньше. Глядя на заголовки запроса, я заметил файл cookie JSESSIONID, я думаю, что он отправляется tomcat для сохранения сеанса, поэтому уже пытался отправить тот же файл cookie в следующем запросе, однако я не получил никаких результатов.


person Pablo    schedule 03.02.2012    source источник
comment
Когда вы говорите HttpConnection, вы на самом деле имеете в виду HttpURLConnection? Если это так, перейдите к этому: заголовок stackoverflow.com/questions/2793150/   -  person BalusC    schedule 03.02.2012
comment
Нет... к сожалению, я использую JavaME, поэтому HttpConnection   -  person Pablo    schedule 03.02.2012
comment
В моих заголовках я получаю что-то вроде этого Заголовок: 1, Set-Cookie: JSESSIONID=C2j31psXI5bEhlXwXdormU3L; Путь=/простой-логин; Безопасный   -  person Pablo    schedule 03.02.2012
comment
Вам нужно отправить его обратно в виде заголовка с именем Cookie и значением JSESSIONID=C2j31psXI5bEhlXwXdormU3L.   -  person BalusC    schedule 03.02.2012
comment
Нашел проблему.. поскольку это httpConnection JavaME, заголовки устанавливаются следующим образом: connection.setRequestProperty(Cookie,sessionId=+ApplicationPreferences.getInstance().getSessionCookieHeader()); connection.setRequestProperty(Cookie,JSESSIONID=+ApplicationPreferences.getInstance().getJavaSessionCookieHeader()); Однако он перезаписывает атрибут Cookie, как я могу добавить много свойств запроса с одним и тем же именем??   -  person Pablo    schedule 03.02.2012
comment
Разве нет метода addRequestProperty()?   -  person BalusC    schedule 03.02.2012
comment
Решение состояло в том, чтобы объединить значения файлов cookie и просто установить одно свойство requestProperty с именем Cookie String myCookies=sessionId=+ApplicationPreferences.getInstance().getSessionCookieHeader()+JSESSIONID=+ApplicationPreferences.getInstance().getJavaSessionCookieHeader(); соединение.setRequestProperty(Cookie,myCookies);   -  person Pablo    schedule 03.02.2012


Ответы (1)


Комментарии были правильными... для сохранения сеанса вам просто нужно отправить файл cookie JSESSIONID обратно на сервер в следующем запросе, проблема в этом случае заключалась в том, что HttpConnection в JavaME имеет только метод setRequestProperty для включения значения заголовка, теперь, если вы устанавливаете одно и то же значение два раза, оно перезаписывает последнее. Поскольку я использовал собственный файл cookie и файл cookie JSessionID, я установил их следующим образом:

connection.setRequestProperty("Cookie","sessionId="+ApplicationPreferences.getIn‌​stance().getSessionCookieHeader()); 
connection.setRequestProperty("Cookie","JSESSIONID="+ApplicationPreferences‌​.getInstance().getJavaSessionCookieHeader());

Когда правильный способ сделать это - объединить строки cookie, а затем установить заголовок Cookie со всеми ними:

String myCookies="sessionId="+ApplicationPreferences.getInstance().getSessionCookieHead‌​er()+";"+"JSESSIONID="+ApplicationPreferences.getInstance().getJavaSessionCookieHeade‌​r(); 
person Pablo    schedule 03.02.2012