2015-09-16 2 views
0

Я работаю над Spring 4 mvc с базой данных mysql, tomcat. В принципе, я создаю пружинный остаток, который будет использоваться Angular JS.Избегайте репликации сеанса в приложении Spring rest с помощью Cookies

Примечание: Я не использую Spring security

Для того, чтобы избежать репликации сеанса в случае clustered environment, я использую cookie approach.On логин, я генерирующий one unique session id (using java UUID) и использовать его для создания cookie, а затем установите cookie в ответ. Также сохраните этот идентификатор сеанса в базе данных вместе с любыми пользовательскими данными.

Чтобы проверить подлинность каждого API для отдыха, я написал Spring interceptor, который перехватит каждый вызов API для всех вызовов, который, в свою очередь, проверяет, есть ли файл cookie в запросе. Если он присутствует, я извлекаю значение идентификатора сеанса и использую он, делая вызов базы данных, чтобы проверить, действительно ли это или нет. При выходе из системы я удаляю файл cookie.

Основание на то, что я делаю, как описано выше, у меня есть несколько вопросов:

1) Is my approach correct? or do you see any flaw in it. 
2) Let me know if there is any other better method to achieve the same i.e. to avoid session replication. 
3) Since, I am not using any HTTP session, how do I achieve something like session-timeout or do i even need it? 

ответ

0

1) Является ли мой подход правильный? или вы видите недостаток.

Его хороший подход. Просто пару очков, хотя в порядке старшинства: -

  • Если вы используете API для обслуживания много запросов затем думать об использовании в памяти кэш, а затем БД. Переход к БД относительно дороже. Alot является субъективным, которого я знаю, и это зависит от вашей настройки, но просто рассмотрите базу данных для данных, которые вы хотите прожить за пределами сеансов. Лучше использовать более временный/более быстрый магазин, такой как кеш в памяти для таких вещей, как маркеры API. Если через кластер изучите решение распределенного кеша.

  • Использование файлов cookie не обязательно является угрозой безопасности, но немного читает о CSRF. Более безопасно передавать токен в заголовке HTTP, а не в самом файле cookie, то есть, если вас беспокоит CSRF (я использую подход Header в своих приложениях, но я думаю, что CSRF относительно редка, и это зависит от того, насколько чувствительны ваши данные)

2) Дайте мне знать, если есть какие-либо другие лучший способ добиться того же т.е., чтобы избежать репликации сеанса.

ничего, чтобы добавить более ответ на 1.)

3) Поскольку я не использую любой HTTP-сессии, как я могу добиться что-то вроде сеанса тайм-аута или же я даже это нужно?

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