Насколько я понимаю, вы пытаетесь установить полную связь между клиентом и сервером. Таким образом, вы входите в систему с первым запросом, а затем используете какой-то токен для дальнейших запросов.
Обычно я могу порекомендовать вам общаться без гражданства. Это означает, что вы аутентифицируете и авторизуете каждый запрос. В этом сценарии вам не нужно LoginRestService
. Важными моментами здесь являются:
- Клиент может предоставить имя пользователя и пароль через заголовки HTTP (нестандартный, что-то вроде Имя пользователя: пользователь и Пароль: секретный ).
- На стороне сервера вы можете использовать
- Используйте АОП: просто оберните вас
BooksService
с помощью AuthAdvice
(что вы должны написать сами). Советуем вам как-нибудь (с функциональностью Джерси) получить доступ к HTTP-запросу, взять из него соответствующие заголовки, аутентифицировать и авторизовать пользователя (загружаемого из БД), ввести пользователя в ThreadLocal
(чтобы он был доступен для остальной части вашего приложения). ) при необходимости и просто вызовите соответствующий метод или сгенерируйте исключение, если что-то не так с учетными данными.
- Используйте функциональность Джерси: (извините, я не очень знаком с Джерси, я использую CXF, но концептуально это должно быть то же самое), просто создайте какой-нибудь
AuthHendler
и вставьте его в Запрос предварительной обработки конвейера. В этом обработчике вам нужно сделать то же самое, что и в AuthAdvice
Теперь каждый ваш запрос будет аутентифицирован и авторизован, когда он достигнет BooksService
. Обычно реализация без сохранения состояния лучше для масштабируемости.
Если вы хотите пройти весь путь, вы можете просто использовать HttpSession
. LoginService.login()
должен быть запрос POST, потому что вы действительно делаете некоторые побочные эффекты на сервере. Сервис выполнит аутентификацию вашего пользователя в соответствии с предоставленными именем пользователя и паролем и поместит загруженный объект User
в сеанс. На этом этапе сеанс на стороне сервера создается, и у клиента есть идентификатор сеанса в файлах cookie. Поэтому дальнейшие запросы должны автоматически отправлять его на сервер. Чтобы авторизовать запросы к BooksService
, вам все еще нужен какой-то совет обработчика (см. Решение без сохранения состояния). Единственное отличие: на этот раз пользователь берется из HttpSession
(вы должны убедиться, что вы вошли в систему!).
Обновление: И использование HTTPS ! :)