HttpConnection поддерживая сессию - PullRequest
0 голосов
/ 03 февраля 2012

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

1 Ответ

0 голосов
/ 03 февраля 2012

Комментарии были правильными ... чтобы сохранить сеанс, вам просто нужно отправить 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(); 
...