Сервлет Java, файлы cookie и Android - PullRequest
2 голосов
/ 20 июля 2011

Я пишу приложение для Android, которое отправляет имя пользователя и пароль в сервлет Java, размещенный на Google App Engine. Я пишу оба приложения для Android. и сервлет.

Имя пользователя и пароль упаковываются в POST-запрос на устройстве, а метод сервлета doPost () проверяет значения. Если имя пользователя и пароль верны, я запрашиваю сеанс ... создавая его, если он не существует:

HttpSession session = request.getSession(true);

В этом сеансе я храню пару имя-значение "logged" и "true".

Вернувшись на устройство Android, возвращается cookie с HTTP-статусом 200 OK. Все это выглядит нормально, поскольку сеанс на сервере реализован с использованием файлов cookie (для меня это прозрачно, поскольку я просто использую API сеанса).

Все последующие HTTP POST, сделанные устройством Android, упаковывают cookie в HTTP POST, чтобы он мог запрашивать страницы .jsp или использовать другие сервлеты, которые проверяют сессию на значение «logged» и «true» (т.е. защищенные страницы). .

Проблема: cookie возвращается, даже если следующий код НЕ запущен:

HttpSession session = request.getSession(true);

т.е. имя пользователя и пароль были ложными. Это не такая проблема безопасности, поскольку пара «зарегистрированное» и «истинное» имя-значение никогда не устанавливается, поэтому приложение не может использовать .jsp или другие сервлеты. Однако я использовал тот факт, что cookie-файл был возвращен из запроса POST на устройство в качестве знака успешной аутентификации.

Почему я получаю печенье, хотя я не использую или не запрашиваю использование сеанса?

Мое текущее решение - создать дополнительный файл cookie в сервлете и проверить его на устройстве. ОДНАКО, этот файл cookie не является файлом, который упакован в последующие сообщения с устройства, поскольку он не является файлом cookie, связанным с сеансом, содержащим «зарегистрированное» «истинное» значение. Это кажется вздорным. Я явно что-то не так понял.

1 Ответ

0 голосов
/ 20 июля 2011

Большинство (или, возможно, все) контейнеров сервлетов будут всегда назначать пользователю cookie сеанса, если у них его еще нет, независимо от того, запрашивается ли в веб-приложении явное обращение к сеансу или нет. Google App Engine ничем не отличается в этом отношении. Вы не должны предполагать, что что-либо основано на простом существовании или несуществовании файла cookie, кроме того, что устройство отправило запрос на сервер и получило ответ.

Если вы хотите убедиться, что вход в систему прошел успешно, почему бы просто не отправить ответ на запрос входа в систему, который может быть легко проанализирован. Например, подойдет простой JSON-фрагмент, такой как {"status": "success"}, или даже просто текстовая строка «success».

Ваш второй подход с использованием cookie определенно звучит немного странно. Предположительно, ваш запрос аутентификации уже отправляет некоторый ответ обратно на устройство (это должно быть, если куки отправляются). Что, по вашему мнению, вы получаете от использования файла cookie, который вы не получаете, просто отправляя какое-то сообщение о статусе обратно как часть ответа?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...