Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как написать реализацию remember-me Spring Security / 10 сообщений из 10, страница 1 из 1
11.05.2013, 19:39:43
    #38253857
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать реализацию remember-me Spring Security
Т.е. какие интерфейсы требуется реализовать, чтобы была возможность поддерживать свой вид токена и свою схему бд.
Я не могу найти пример, а в документации и книге все довольно скудно.
...
Рейтинг: 0 / 0
11.05.2013, 20:24:40
    #38253878
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать реализацию remember-me Spring Security
Думаю, для аутенфикации по своей схеме надо указать свой провайдер (от интерфейса AuthenticationProvider), само собой определить свой Authentication (7 переопределенных методов) и UserDetailsServices (1 переопределенный метод). А для кастомной реализации RememberMe использовать класс, имплементирующий RememberMeServices (можно банально взять TokenBasedRememberMeServices и внести нужные изменения). Из опыта работы определения этих четырех классов хватает для создания кастомной авторизации и кастомного RememberMe. В кастомный UserDetailsServices можно инжектить нужный ДАО для работы с базой, который используется для переопределенного loadUserByUsername().
...
Рейтинг: 0 / 0
11.05.2013, 21:01:09
    #38253918
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать реализацию remember-me Spring Security
IDVsbruckДумаю, для аутенфикации по своей схеме надо указать свой провайдер (от интерфейса AuthenticationProvider), само собой определить свой Authentication (7 переопределенных методов) и UserDetailsServices (1 переопределенный метод). А для кастомной реализации RememberMe использовать класс, имплементирующий RememberMeServices (можно банально взять TokenBasedRememberMeServices и внести нужные изменения). Из опыта работы определения этих четырех классов хватает для создания кастомной авторизации и кастомного RememberMe. В кастомный UserDetailsServices можно инжектить нужный ДАО для работы с базой, который используется для переопределенного loadUserByUsername().
У RememberMeServices есть две реализации, правильно наследоваться от них или написать полностью свою?
...
Рейтинг: 0 / 0
11.05.2013, 21:04:51
    #38253919
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать реализацию remember-me Spring Security
Если реализовать RememberMeServices, то придется вообще всю работу реализовать, а как добавить нужно к PersistentTokenBasedRememberMeServices пока не очень понимаю.
...
Рейтинг: 0 / 0
11.05.2013, 21:19:11
    #38253930
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать реализацию remember-me Spring Security
Я не до конца понимаю, почему в реализации PersistentTokenBasedRememberMeServices , данные о пользователе и репозитории с токенами разделены. Для чего это сделано? Не проще было бы вместе с токеном получать и данные пользователя, а не делать отдельный запрос.
...
Рейтинг: 0 / 0
12.05.2013, 00:15:20
    #38254039
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать реализацию remember-me Spring Security
Естественно, нет. И это правильно. Не вдавался в код конкретно этого класса, но если в качестве UserDetail (я так понимаю, речь об этом) хранить пользователя со всеми параметрами (имярек, мыло, картинки и прочее), то нарываемся на следующее противоречие при использовании Spring Security, скажем, в контроллерах: для идентефикации пользователя-принципала он вычитывается из базы один раз при открытии веб-сессии и далее хранится в этой сессии (principal в Authentication). Если поменять сущность (данные в таблицы), то надо переавторизироваться, тогда как данные пользователя могут подлежать частой перезаписи и использоваться не так активно. Поэтому имеет смысл держать объект AuthUser, содержащий авторизационные данные, и User с любым набором данных, и связать их даже связью Один-к-одному, и при необходимости в методе контроллера подгружать объект User, получая его из параметров (AuthUser) authentication.getPrincipal().

Изначально также использовал единый объект пользователя, используя и как авторизационный, и как набор свойств, но столкнулся с тем, что при изменении свойства пользователя приходится вручную переавторизовываться, чтобы в другом методе контроллера получить обновленный объект пользователя. По-моему, это нелогично и значительно более затратно. Так и пришел к такой схеме, хотя, по-видимому, она так и используется в стандартных классах SS, но я не обратил сразу на это внимания. Если поможет, то свои поиски я изложил в статье на Хабре более года назад - многие вещи сейчас кажутся неправильными и я бы уже делал по-другому, но цепочка создания кастомной авторизации может помочь.
...
Рейтинг: 0 / 0
12.05.2013, 00:25:53
    #38254044
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать реализацию remember-me Spring Security
IDVsbruck, согласен, но hibernate связь one-to-one грузит сразу без lazy. Т.е. разделить не получиться, если я правильно понимаю.
...
Рейтинг: 0 / 0
12.05.2013, 00:26:43
    #38254045
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать реализацию remember-me Spring Security
IDVsbruck, вау) вы пишете для хабра) это круто)
...
Рейтинг: 0 / 0
12.05.2013, 00:56:29
    #38254057
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать реализацию remember-me Spring Security
Статья интересная)
...
Рейтинг: 0 / 0
12.05.2013, 01:11:46
    #38254059
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать реализацию remember-me Spring Security
rdmIDVsbruck, согласен, но hibernate связь one-to-one грузит сразу без lazy. Т.е. разделить не получиться, если я правильно понимаю.
Ну, можно и lazy, никто не мешает.
В последнем проекте я пошел по противоречивому пути, не обеспечивая целостность базы внутренними связями, в большинстве своем только наличием ссылочного идентефикатора в "зависимой" таблице. Таким образом, в AuthUser есть только id, и User я успешно загружаю запросом. Решение крайне противоречивое, но специфика Хибернейта тащить "очень-очень много" и сложность контролировать это при сильно раздутой структуре заставили обратиться к инфе по решениям в соцсетях, где в большинстве своем используется именно такой подход, причем, он не ограничен одной базой - с независимыми ключами просто использовать параллельно NoSQL-базу для хранения, скажем, большого объема справочной информации (словарей).
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как написать реализацию remember-me Spring Security / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]