HttpConnection поддерживая сессию
Я использую некоторые веб-сервисы, созданные в java с использованием архитектуры Rest, мой клиент - это мобильное приложение, которое использует HttpConnection для извлечения данных. Для управления аутентификацией и авторизацией я использую файлы cookie, управляемые классом @SessionScoped, однако я не знаю, как заставить сеанс сохраняться посредством запросов. В основном проблема заключается в том, что я внедряю диспетчер сеансов в другие службы, которые являются @RequestScoped, однако, поскольку сеанс не сохраняется, я всегда получаю разные экземпляры для класса @SessionScoped, таким образом удаляя все файлы cookie или записи, которые у меня были ранее. Глядя на заголовки запросов, я заметил файл cookie JSESSIONID. Я думаю, что он отправляется tomcat для сохранения сеанса, поэтому пытался уже отправить тот же файл cookie в следующем запросе, однако я не получил результатов.
1 ответ
Комментарии были правильными... чтобы сохранить сеанс, вам просто нужно отправить cookie JSESSIONID обратно на сервер в следующем запросе, проблема в этом случае заключалась в том, что HttpConnection в JavaME имеет только метод setRequestProperty для включения значения заголовка, теперь если Вы устанавливаете одно и то же значение два раза, когда оно перезаписывает последнее. Поскольку я использовал пользовательский файл cookie и файл cookie JSessionID, я установил их следующим образом:
connection.setRequestProperty("Cookie","sessionId="+ApplicationPreferences.getInstance().getSessionCookieHeader());
connection.setRequestProperty("Cookie","JSESSIONID="+ApplicationPreferences.getInstance().getJavaSessionCookieHeader());
Когда правильный способ сделать это - объединить строки cookie, а затем установить заголовок Cookie со всеми ними:
String myCookies="sessionId="+ApplicationPreferences.getInstance().getSessionCookieHeader()+";"+"JSESSIONID="+ApplicationPreferences.getInstance().getJavaSessionCookieHeader();