Кэширование текущих пользовательских данных в переменной области сеанса - PullRequest
1 голос
/ 01 февраля 2012

Как я могу кэшировать текущий экземпляр пользователя в течение всего сеанса пользователя, чтобы мои службы могли получить к нему свободный доступ, не обращаясь к службам доступа пользователей, а затем снова и снова получать пользовательские данные из базы данных,

Я знаю, что Spring поддерживает концепцию объединенных компонентов (для сеанса, для запроса и т. Д.), Но, честно говоря, я на самом деле никогда не использовал его, поэтому я был бы очень благодарен, если бы кто-то мог показать мне путь.

Я очень надеюсь, что такого рода область видимости сессии будет поточно-безопасной.

Ответы [ 2 ]

2 голосов
/ 01 февраля 2012

Весна не решение для всего. HttpSession - это то, что вам нужно. И область видимости сеанса не является поточно-ориентированной .

0 голосов
/ 01 февраля 2012

Если вы используете Spring Security, то вы можете рассмотреть возможность использования расширенного объекта UsersDetails.

- только вы (потому что вы знаете только свои случаи использования) должны решить, является ли это полезным.


Чтобы ответить на ваш вопрос об объектах Spring Scope Scoped:

См. Ссылка Spring, Глава 3.11.4.4 Указание области действия bean для примера, и Глава 3.4.Области действия Bean для обзора областей действия ( обратите внимание, что ссылка на Session в этой главе неверна ).

И обратите внимание, что Spring Session Scoped Beans требует прослушивателя:

<listener>
   <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
 </listener>

IHO: Это зависит от того, что вы будете делать с этими данными в области сеанса, должны ли вы использовать Spring Session Beans или HTTP-сеанс напрямую.Например, если вам нужны эти данные в разных местах на уровне сервиса, то HTTP-сессия может быть не очень хорошим решением.

...