Ответ 1
Отслеживание пользователя по серверам сложно для истинной стороне сервера без учета состояния. В большинстве случаев это сортируемый сервер без учета состояния, в котором логины являются исключением. Однако большая проблема с серверами без гражданства заключается в том, что кластеризация очень проста, поэтому вы можете масштабировать горизонтально.
В Java вы можете сделать его безстоящим, используя либо файлы cookie для хранения учетных данных, либо используя распределенные хэши. Как правило, люди принимают использование чего-то вроде memcache и говорят, что они не имеют состояния, поскольку состояние хранится вне веб-сервера. Это позволяет пользователю использовать любой веб-сервер в ферме и все еще безопасно аутентифицироваться. В Java мы имеем множество распределенных хэш-реализаций, которые вы можете использовать с spring, поэтому вам не нужно использовать memcache для этого.
Другой вариант заключается в использовании файлов cookie для хранения криптовального безопасного хэшированного билета под названием HMAC. Использование файлов cookie позволяет избежать использования сеанса, поэтому веб-сервер не имеет статуса. С помощью HMAC вы можете подписать блок данных, который не может быть подделан или создан третьей стороной и, как гарантируется, будет получен от вас. Это не требует внешних ресурсов сервера (кэш) для аутентификации пользователя, чтобы он мог масштабироваться лучше, но есть некоторые проблемы с безопасностью, о которых вы должны знать. FYI Google использует этот метод для масштабирования по горизонтали. Один HMAC не похож на SHA1 или другие цирто-хеши. Им нужен секретный ключ, который должен быть на каждом сервере фермы. Это также должно быть защищено с помощью симметричного ключа шифрования, чтобы убедиться, что он надежно хранится на сервере, если кто-то получит файл. Также информация HMAC хранится в ясности, поэтому, когда вы можете поместить имя пользователя или адрес электронной почты в файл cookie, фактический криптографический хэш доступен для всех. Если кто-то должен был получить этот куки файл, он мог бы маскарироваться как этот пользователь. Именно поэтому HMAC обычно действительны только в течение определенного периода времени. После этого они истекают, поэтому, если кто-то их получит, они не смогут получить доступ к этой учетной записи навсегда.
Итак, у HMAC есть эта слабость, и вы должны быть осторожны с тем, какие приложения вы используете в них. Было бы очень плохой идеей для Paypal использовать эту схему, потому что все, что мне нужно сделать, это получить ваш безопасный файл cookie, а затем передать все ваши средства мне. Большой потенциал - все, что ваше приложение действительно без гражданства.
Последний вариант - сохранить ваши сеансы java в распределенном хэше. Php и другие платформы будут сбрасывать свои сеансы в базе данных, бедный mans распределенный кеш или сбрасывать их в memcache. С Java вы можете сделать то же самое. Вы также можете помещать свои объекты сеанса в распределенный кеш. Этот вариант не понравился, потому что люди думают "круто, теперь я могу сбросить все, что захочу, в свою сессию, и он будет без гражданства". Однако, как и во всех распределенных кэшах, существуют ограничения на скорость передачи, время репликации и размер полезной нагрузки. Это справедливо для Java или Memcache. Держите свои сеансы маленькими, и это хорошо работает. Бросьте все на сессию, и вы вернетесь к проблемам масштабирования, которые у вас есть с одним сервером. И действительно, это, вероятно, хуже, чем если бы вы только что сделали свой сервер стойким, потому что иногда grid-вычисления хуже, чем один сервер.
Обновление: вот список распределенных библиотек кеширования Java, которые вы можете использовать для этого:
http://www.manageability.org/blog/stuff/distributed-cache-java