Spring Remember Me не работает с репликацией причала и сеанса

Я использую Jetty 8, и в настоящее время у меня есть два экземпляра, настроенных и работающих за балансировщиком нагрузки с циклическим перебором. Я настроил его на использование репликации сеанса через MongoDB. В моем приложении используется пружинная безопасность. Он отлично работает с двумя исключениями. Я включу один здесь, а другой в другом вопросе.

  1. Spring Security «Помни меня» работает неправильно. Если пользователь входит в систему и запрашивает «Запомнить меня», тогда он будет работать нормально, если предположить, что будущие запросы аутентификации пользователей попадают на конкретный узел, который был затронут во время первоначального входа в систему. Однако, если будущий запрос аутентификации попадает на другой узел, этот узел, похоже, не знает о запросе «Запомнить меня» и поэтому запрашивает у пользователя учетные данные.

У кого-нибудь есть предложения? Я собираюсь начать копаться в реализации весеннего кода безопасности «запомнить меня» и jetty-nosql, но мне бы понравилось, если бы кто-то мог сэкономить мне время.

Кроме того, я пробовал как токен «запомнить меня» на основе хэша cookie, так и подход с постоянным токеном «запомнить меня» в базе данных, и оба имеют одну и ту же проблему.


person DavidA    schedule 21.11.2012    source источник
comment
Этого действительно недостаточно, чтобы продолжать. Вам действительно нужно показать, что файл cookie отправляется браузером и проходит через ваш балансировщик нагрузки в экземпляр Jetty (например, путем сброса туда входящих запросов) и опубликовать соответствующий журнал отладки для обработки этого запроса. Без этой информации я бы сказал, что это, скорее всего, проблема с конфигурацией маршрутизатора. Возможно, cookie устанавливается, например, для внутреннего адреса.   -  person Shaun the Sheep    schedule 22.11.2012


Ответы (1)


Решение состоит в том, чтобы использовать подход с постоянным токеном «запомнить меня» в db. В нашей ситуации мы использовали org.springframework.security.web.authentication.rememberme.PersistentTokenBasedRememberMeServices.

Оказывается, наша первая попытка использовать подход с постоянным токеном db была просто реализована по ошибке. Когда мы сделали это правильно, это работало нормально и решило нашу проблему с запоминанием меня.

person DavidA    schedule 19.03.2013