|
|
|
Как написать реализацию remember-me Spring Security
|
|||
|---|---|---|---|
|
#18+
Т.е. какие интерфейсы требуется реализовать, чтобы была возможность поддерживать свой вид токена и свою схему бд. Я не могу найти пример, а в документации и книге все довольно скудно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2013, 19:39:43 |
|
||
|
Как написать реализацию remember-me Spring Security
|
|||
|---|---|---|---|
|
#18+
Думаю, для аутенфикации по своей схеме надо указать свой провайдер (от интерфейса AuthenticationProvider), само собой определить свой Authentication (7 переопределенных методов) и UserDetailsServices (1 переопределенный метод). А для кастомной реализации RememberMe использовать класс, имплементирующий RememberMeServices (можно банально взять TokenBasedRememberMeServices и внести нужные изменения). Из опыта работы определения этих четырех классов хватает для создания кастомной авторизации и кастомного RememberMe. В кастомный UserDetailsServices можно инжектить нужный ДАО для работы с базой, который используется для переопределенного loadUserByUsername(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2013, 20:24:40 |
|
||
|
Как написать реализацию remember-me Spring Security
|
|||
|---|---|---|---|
|
#18+
IDVsbruckДумаю, для аутенфикации по своей схеме надо указать свой провайдер (от интерфейса AuthenticationProvider), само собой определить свой Authentication (7 переопределенных методов) и UserDetailsServices (1 переопределенный метод). А для кастомной реализации RememberMe использовать класс, имплементирующий RememberMeServices (можно банально взять TokenBasedRememberMeServices и внести нужные изменения). Из опыта работы определения этих четырех классов хватает для создания кастомной авторизации и кастомного RememberMe. В кастомный UserDetailsServices можно инжектить нужный ДАО для работы с базой, который используется для переопределенного loadUserByUsername(). У RememberMeServices есть две реализации, правильно наследоваться от них или написать полностью свою? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2013, 21:01:09 |
|
||
|
Как написать реализацию remember-me Spring Security
|
|||
|---|---|---|---|
|
#18+
Если реализовать RememberMeServices, то придется вообще всю работу реализовать, а как добавить нужно к PersistentTokenBasedRememberMeServices пока не очень понимаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2013, 21:04:51 |
|
||
|
Как написать реализацию remember-me Spring Security
|
|||
|---|---|---|---|
|
#18+
Я не до конца понимаю, почему в реализации PersistentTokenBasedRememberMeServices , данные о пользователе и репозитории с токенами разделены. Для чего это сделано? Не проще было бы вместе с токеном получать и данные пользователя, а не делать отдельный запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2013, 21:19:11 |
|
||
|
Как написать реализацию remember-me Spring Security
|
|||
|---|---|---|---|
|
#18+
Естественно, нет. И это правильно. Не вдавался в код конкретно этого класса, но если в качестве UserDetail (я так понимаю, речь об этом) хранить пользователя со всеми параметрами (имярек, мыло, картинки и прочее), то нарываемся на следующее противоречие при использовании Spring Security, скажем, в контроллерах: для идентефикации пользователя-принципала он вычитывается из базы один раз при открытии веб-сессии и далее хранится в этой сессии (principal в Authentication). Если поменять сущность (данные в таблицы), то надо переавторизироваться, тогда как данные пользователя могут подлежать частой перезаписи и использоваться не так активно. Поэтому имеет смысл держать объект AuthUser, содержащий авторизационные данные, и User с любым набором данных, и связать их даже связью Один-к-одному, и при необходимости в методе контроллера подгружать объект User, получая его из параметров (AuthUser) authentication.getPrincipal(). Изначально также использовал единый объект пользователя, используя и как авторизационный, и как набор свойств, но столкнулся с тем, что при изменении свойства пользователя приходится вручную переавторизовываться, чтобы в другом методе контроллера получить обновленный объект пользователя. По-моему, это нелогично и значительно более затратно. Так и пришел к такой схеме, хотя, по-видимому, она так и используется в стандартных классах SS, но я не обратил сразу на это внимания. Если поможет, то свои поиски я изложил в статье на Хабре более года назад - многие вещи сейчас кажутся неправильными и я бы уже делал по-другому, но цепочка создания кастомной авторизации может помочь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2013, 00:15:20 |
|
||
|
Как написать реализацию remember-me Spring Security
|
|||
|---|---|---|---|
|
#18+
IDVsbruck, согласен, но hibernate связь one-to-one грузит сразу без lazy. Т.е. разделить не получиться, если я правильно понимаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2013, 00:25:53 |
|
||
|
Как написать реализацию remember-me Spring Security
|
|||
|---|---|---|---|
|
#18+
IDVsbruck, вау) вы пишете для хабра) это круто) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2013, 00:26:43 |
|
||
|
Как написать реализацию remember-me Spring Security
|
|||
|---|---|---|---|
|
#18+
Статья интересная) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2013, 00:56:29 |
|
||
|
Как написать реализацию remember-me Spring Security
|
|||
|---|---|---|---|
|
#18+
rdmIDVsbruck, согласен, но hibernate связь one-to-one грузит сразу без lazy. Т.е. разделить не получиться, если я правильно понимаю. Ну, можно и lazy, никто не мешает. В последнем проекте я пошел по противоречивому пути, не обеспечивая целостность базы внутренними связями, в большинстве своем только наличием ссылочного идентефикатора в "зависимой" таблице. Таким образом, в AuthUser есть только id, и User я успешно загружаю запросом. Решение крайне противоречивое, но специфика Хибернейта тащить "очень-очень много" и сложность контролировать это при сильно раздутой структуре заставили обратиться к инфе по решениям в соцсетях, где в большинстве своем используется именно такой подход, причем, он не ограничен одной базой - с независимыми ключами просто использовать параллельно NoSQL-базу для хранения, скажем, большого объема справочной информации (словарей). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2013, 01:11:46 |
|
||
|
|

start [/forum/topic.php?fid=59&gotonew=1&tid=2129381]: |
0ms |
get settings: |
20ms |
get forum list: |
28ms |
check forum access: |
8ms |
check topic access: |
8ms |
track hit: |
66ms |
get topic data: |
24ms |
get first new msg: |
14ms |
get forum data: |
6ms |
get page messages: |
97ms |
get tp. blocked users: |
2ms |
| others: | 395ms |
| total: | 668ms |

| 0 / 0 |
