2012-07-03 2 views
3

После того, как я прочитал много комментариев от разных пользователей о сеансовом управлении для приложений, поддерживающих Rest, вот что я думал делать.Управление сеансом в приложениях REST Service

Мое приложение может быть доступно из браузера (как обычного веб-приложения) и мобильных устройств. Приложение было написано с помощью управления сеансом http на сервере вначале для приложения на основе браузера. Теперь, получая Мобильный клиент, мы реализовали веб-службы Rest, с тем же уровнем обслуживания для мобильного устройства и браузера.

Когда пользователь входит в систему с помощью мобильного устройства, мы создаем уникальный токен аутентификации, генерируем сеанс http и сохраняем http-сеанс с этим идентификатором токена в качестве ключа, карту значений в приложении. Позже мы ожидаем, что каждый запрос пользователя с мобильного устройства вернет этот токен, и используя этот токен, вы получите сеанс с карты и продолжите.

Может ли кто-нибудь просмотреть мой подход и подтвердить, все ли в порядке?

Теперь у меня есть второй вопрос: мы используем JsonPRequestBuilder из GWT, чтобы вызывать службы REST с помощью jersey-guice. Как отправить этот токен в заголовок http во время вызова jsonp из GWT?

+1

Внутренней частью определения веб-службы RESTful является ее безгражданство.Каждый запрос, сделанный из службы, должен содержать все данные, необходимые для выполнения запроса. Если сервер дает клиенту токен, тогда сервер теряет карту ключа/значения для этого токена (например, служба останавливается и перезапускается), этот токен и его прежнее состояние могут быть недействительными. Это не значит, что вы не можете делать то, что вы просите. Я просто не думаю, что вы можете назвать это RESTful. – JMD

ответ

0

Для второго: с JSONP вы должны добавить свой токен в качестве простого параметра http, у вас нет доступа к объекту типа Request при использовании обычного XMLHttpRequest. Поэтому вы не можете установить какие-либо заголовки, все должно идти в строке запроса.

+0

Okey ... Большое спасибо – Santosh

2

«Сессия в REST» - это оксюморон.

Когда пользователь входит в систему с мобильного устройства, мы создаем уникальный маркер аутентификации

Кажется хорошо, хотя это выглядит немного, как вы заново OAuth.

создать сеанс http, и мы храним http-сеанс с этим идентификатором маркера в качестве ключа, карты значений в приложении.

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

Вы не говорите об истечении срока действия этого кеша или о том, как/когда вы его очищаете и освобождаете память.

Теперь у меня есть второй вопрос: мы используем JsonPRequestBuilder из GWT для вызова моих служб REST с помощью jersey-guice. Как отправить этот токен в заголовок http во время вызова jsonp из GWT?

Как сказал @Arcadien, JSONP только о вставке <script> элемента на странице, так что у вас есть только контроль над URL, и, таким образом, это, где вы должны/можете передать маркер аутентификации (хотя и не будучи на самом деле обеспечения).
Могу ли я подвергнуть сомнению причину использования JSONP с мобильного «родного» приложения? AFAIK нет проблем с SOP из UIWebViews или аналогичных, поэтому RequestBuilder или XMLHttprequest будет Just Work ™.

+1

Мы пишем наши приложения как для настольных, так и для мобильных версий клиентов. Речевые службы являются общими. Поскольку запросы поступают из разных доменов, я выбрал JSONP над RequestBuilder. – Santosh

+2

+1 для «Сессия в REST» - это оксюморон. – JMD

Смежные вопросы