
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
13.11.2012, 23:07:55
|
|||
|---|---|---|---|
[SpringMVC] Обновление объекта Authentication |
|||
|
#18+
Методы контроллера SpringMVC выглядят примерно так (более-менее стандартный подход): Код: java 1. 2. 3. 4. 5. 6. 7. 8. AuthUser - сущность-объект для авторизации, может быть через Гугл, Фейсбук, логином с паролем и т.д. User - сущность-объект, характеризующий непосредственно самого пользователя. На одного User может ссылаться несколько AuthUser (логин любым способом). Это прелюдия. Проблема в том, что, как я понимаю, authentication в вызываемом методе устанавливается из контекста Спринга примерно таким способом: Код: java 1. Если я меняю какое-то поле в объекте User (или AuthUser), то обновляю контекст, и данные пользователя при рефреше страницы или переходе на другую поменяются. Но! Если у меня открыто 2 браузера и в одном из них я поменяю объект User или AuthUser, то другой на это автоматически не среагирует - ни при рефреше, ни при переходе (контекст для данной сессии не поменялся), сменится только при повторном логоне (вручную или через Remember-Me) - путем переназначения authentication. Особой проблемы в том, чтобы для контроллера определить Код: java 1. и в каждом методе добавить строку Код: java 1. нет - в этом переопределнном методе провайдера userDetailsService заново вычитывает учетные данные из базы. Но: а) уж больно такой "ручной" способ мне кажется некошерным; б) неэстетично добавлять этот код в каждый из методов контроллера. Я, конечно, понимаю, что на практике для достижения решения этот вызов так или иначе необходим, только вот гложат меня сомнения - а нет ли каких-то дополнительных настроек, которые толкали автообновлять нужные данные при запросе? - Не хочется переопределять очередной спринговский класс для выполнения требуемого (чтобы заново тянул данные при запросе). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.11.2012, 09:47:33
|
|||
|---|---|---|---|
[SpringMVC] Обновление объекта Authentication |
|||
|
#18+
Про настройки не знаю, но что бы каждый раз не писать в принципе можно же обычным фильтром обойтись? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.11.2012, 11:22:17
|
|||
|---|---|---|---|
|
|||
[SpringMVC] Обновление объекта Authentication |
|||
|
#18+
IDVsbruck, я бы хранил в Authentication не полностью объект AuthUser, а только его ключ (логин+провайдер). А там где нужно - вытаскивал из базы/кеша данные по этому ключу. При изменении других полей в этом объекте сохраняем эти поля в базу/кеш. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.11.2012, 14:30:06
|
|||
|---|---|---|---|
[SpringMVC] Обновление объекта Authentication |
|||
|
#18+
pavel_nvПро настройки не знаю, но что бы каждый раз не писать в принципе можно же обычным фильтром обойтись? Да, конечно, даже проще интерцептор подключить на входящие запросы. Правда, будет обновлять объект даже если я его не использую в методе. Вот если бы подключить его только для методов с вызовом Authenticate ... Хотя с точки зрения нагрузки проще обновлять в нужных методах. Advaя бы хранил в Authentication не полностью объект AuthUser, а только его ключ (логин+провайдер). А там где нужно - вытаскивал из базы/кеша данные по этому ключу. При изменении других полей в этом объекте сохраняем эти поля в базу/кеш. Так я выигрываю на одном единственном запросе на всю сессию - первом при входе. Это плюс. А минус покрупнее будет - иногда удобно пользовать объектом, даже зная, что какие-то поля могут быть изменены. А взять из памяти как бы проще, чем дергать из базы. Хотя сначала идея мне показалась очень дельной, только эффекта от нее нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=59&mobile=1&tid=2130570]: |
0ms |
get settings: |
14ms |
get forum list: |
21ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
64ms |
get topic data: |
16ms |
get forum data: |
4ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 317ms |
| total: | 509ms |

| 0 / 0 |
