| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > spring security, где хранятся инстансы спринга? |
| Автор: iluvatar 28.8.2010, 13:45 |
| Есть у меня авторизация на сайте, я хочу давать пользователям возможность менять имя и эл.ящик Но есть проблемка - remember me service, который парсит куки пользователя на наличие зарегенного пользователя. Идентификатором как раз является имя пользователя. Т.е. мне по сути надо просто бросить пользователю новую куку. Нашел метод с помощью которого это можно сделать - в моем случае это TokenBasedRememberMeServices.onLoginSuccess() Вопрос такой - как мне получить инстанс этого класса? Вообще-то он хранится в фильтре RememberMeAuthenticationFilter, поле rememberMeServices. Но к фильтру я тоже не знаю как обратиться, статических методов там нет. Очень не хочется писать свой фильтр или сервис только из-за этого. По сути мне надо обратиться к созданному объекту, который хранится где-то в дебрях спринга. Как можно это сделать? |
| Автор: Старовъръ 28.8.2010, 15:09 | ||
Все spring-контексты загружаются в web.xml по средством:
|
| Автор: iluvatar 28.8.2010, 18:12 |
| А как обратиться к описанному contextConfigLocation ? По идее я должен где-то статический метод вызвать, но у какого класса? |
| Автор: Старовъръ 28.8.2010, 19:03 | ||
| 1. Тебе самому нужно создать бин remember-me-service. 2. Создать ты его должен в applicationContext-security.xml который подсоединяется через конфиг параметры, иже указаны выше. 3. Ты все конфиги можешь там прописать и ссылаться на бины друг друга. Вот пример spring security 2.x:
|
| Автор: iluvatar 28.8.2010, 20:12 |
| Мы друг друга не понимаем. у меня все прекрасно работает, конфиг есть, но только переписывать rememberMeService мне не надо, мне стандартного хватает за глаза. мне нужно в конкретном месте вызвать конкретный метод проинициализированного спрингом класса. т.е. в фильтре RememberMeAuthenticationFilter в методе doFilter доступно поле rememberMeServices. Этот объект был создан спрингом. Мне нужно получить этот объект в произвольном месте моей программы, не только в фильтре. Вопрос - где хранятся объекты созданные спрингом и как к ним обращаться из произвольного класса. Это же инстансы, они должны где-то храниться. Если еще проще - как в каком-нить экшене получить rememberMeService, описанный в applicationContext? |
| Автор: Старовъръ 29.8.2010, 06:53 | ||||||||
|
| Автор: iluvatar 29.8.2010, 11:37 |
| Я вообще не об этом. Я не показывал свой конфиг, но поверь там у меня все прекрасно, конфиг у меня рабочий. Речь вообще не о конфиге. И даже не о security. Еще проще опишу свою проблему. Я описываю два бина (любых), первый содержит второй в одном из своих полей. Второй соответственно доступен из первого, а мне надо его получить в произвольном месте моего класса, которые создается не через спринг. Как мне получить мой вложенный бин в struts-экшене например? |
| Автор: wedens 29.8.2010, 12:43 | ||
а в чем проблема собственно стратс экшн добавить в спринг и подключить внешний бин через Autowired и через getter вынуть внутренний, не? |
| Автор: iluvatar 29.8.2010, 13:40 |
| алиллуйя!!! небеса разверзлись и ниспослали мне решение!!! Спасибо, сегодня буду пробовать |