Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Spring Security \ Remember Me, Помогите настроить 
V
    Опции темы
Eric_Cartman
Дата 12.11.2009, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 2.3.2008

Репутация: нет
Всего: 1



В тему призывается MisterCleric =)

Текущий applicationContext-security.xml выглядит (частично) следующим образом
Код

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:security="http://www.springframework.org/schema/security"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-2.5.xsd
            http://www.springframework.org/schema/security
            http://www.springframework.org/schema/security/spring-security-3.0.xsd">

    <bean id="springSecurityFilterChain" class="org.springframework.security.web.FilterChainProxy">
        <security:filter-chain-map path-type="ant">
            <security:filter-chain pattern="/**" filters="
             securityContextPersistenceFilter,
             authenticationProcessingFilter,
             logoutFilter,
             securityRequestFilter,
             exceptionTranslationFilter,
             filterSecurityInterceptor
             
                "/>
        </security:filter-chain-map>
    </bean>

   ...   

    <!-- жалкие попытки настроить remember me -->
    <bean id="rememberMeProcessingFilter" class="org.springframework.security.web.authentication.rememberme.RememberMeProcessingFilter">
        <property name="authenticationManager" ref="authenticationManager"/>
        <property name="rememberMeServices" ref="rememberMeServices"/>
    </bean>

    <bean id="rememberMeServices" class="org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices">
        <property name="key" value="foodPortalRocks"/>
        <property name="userDetailsService" ref="mcUserDetailsService"/>
        <property name="alwaysRemember" value="false"/>
    </bean>

    <bean id="remembermeAuthenticationProvider" class="org.springframework.security.authentication.RememberMeAuthenticationProvider">
        <property name="key" value="foodPortalRocks"/>
    </bean>
    <!-- КОНЕЦ:жалкие попытки настроить remember me -->

    ...
</beans>



требуется помощь в превращении жалких попыток в настройки remember me  в корректную и работающую конфигурацию оного

Это сообщение отредактировал(а) Eric_Cartman - 23.11.2009, 11:26
PM MAIL   Вверх
MisterCleric
Дата 12.11.2009, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Привет. Спасибо за личное приглашение  smile  smile 
А в чем собственно проблема? Где валится ошибка? Таким, способом, я конечно, не настраивал секурити, 
но что-то я в твоем коде не нахожу использования фильтра rememberMeProcessingFilter
Ты же у springSecurityFilterChain
Указал стэк фильтров, которые использовать, а почему же туда не поставил и нужный тебе?


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
Eric_Cartman
Дата 12.11.2009, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 2.3.2008

Репутация: нет
Всего: 1



Цитата(MisterCleric @ 12.11.2009,  16:27)
Привет. Спасибо за личное приглашение  smile  smile 
А в чем собственно проблема? Где валится ошибка? Таким, способом, я конечно, не настраивал секурити, 
но что-то я в твоем коде не нахожу использования фильтра rememberMeProcessingFilter
Ты же у springSecurityFilterChain
Указал стэк фильтров, которые использовать, а почему же туда не поставил и нужный тебе?

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

 <bean id="springSecurityFilterChain" class="org.springframework.security.web.FilterChainProxy">
        <security:filter-chain-map path-type="ant">
            <security:filter-chain pattern="/**" filters="
             securityContextPersistenceFilter,
             authenticationProcessingFilter,
             rememberMeProcessingFilter,
             logoutFilter,
             securityRequestFilter,
             exceptionTranslationFilter,
             filterSecurityInterceptor
             
                "/>
        </security:filter-chain-map>
    </bean>


Вместе с тем добавлял remembermeAuthenticationProvider в список провайдеров для authenticationManager'а так
Код

 <bean id="authenticationManager" class="org.springframework.security.authentication.ProviderManager">
        <property name="providers">
            <list>
                <ref local="mcAuthenticationProvider"/>
                <ref local="remembermeAuthenticationProvider"/>
            </list>
        </property>
    </bean>


У меня даже заработал ремемберМи, только вот я в таком случае не мог разлогинится (разлогинивание приводило к моментальному логину по ремер\мберМи)
PM MAIL   Вверх
MisterCleric
Дата 12.11.2009, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Здесь важна последовательность фильтров.
Вот по исходникам какой стек подефолту:
Код

 static {
        filterNameToOrder.put("CHANNEL_FILTER", new Integer(CHANNEL_FILTER));
        filterNameToOrder.put("CONCURRENT_SESSION_FILTER", new Integer(CONCURRENT_SESSION_FILTER));
        filterNameToOrder.put("LOGOUT_FILTER", new Integer(LOGOUT_FILTER));
        filterNameToOrder.put("X509_FILTER", new Integer(X509_FILTER));
        filterNameToOrder.put("PRE_AUTH_FILTER", new Integer(PRE_AUTH_FILTER));
        filterNameToOrder.put("CAS_PROCESSING_FILTER", new Integer(CAS_PROCESSING_FILTER));
        filterNameToOrder.put("AUTHENTICATION_PROCESSING_FILTER", new Integer(AUTHENTICATION_PROCESSING_FILTER));
        filterNameToOrder.put("OPENID_PROCESSING_FILTER", new Integer(OPENID_PROCESSING_FILTER));
        filterNameToOrder.put("BASIC_PROCESSING_FILTER", new Integer(BASIC_PROCESSING_FILTER));
        filterNameToOrder.put("SERVLET_API_SUPPORT_FILTER", new Integer(SERVLET_API_SUPPORT_FILTER));
        filterNameToOrder.put("REMEMBER_ME_FILTER", new Integer(REMEMBER_ME_FILTER)); // LOOK AT THIS!!!
        filterNameToOrder.put("ANONYMOUS_FILTER", new Integer(ANONYMOUS_FILTER));
        filterNameToOrder.put("EXCEPTION_TRANSLATION_FILTER", new Integer(EXCEPTION_TRANSLATION_FILTER));
        filterNameToOrder.put("NTLM_FILTER", new Integer(NTLM_FILTER));
        filterNameToOrder.put("SESSION_CONTEXT_INTEGRATION_FILTER", new Integer(HTTP_SESSION_CONTEXT_FILTER));        
        filterNameToOrder.put("FILTER_SECURITY_INTERCEPTOR", new Integer(FILTER_SECURITY_INTERCEPTOR));
        filterNameToOrder.put("SWITCH_USER_FILTER", new Integer(SWITCH_USER_FILTER));
           }


И здесь видно, что REMEMBER_ME_FILTER идет далеко после LOGOUT_FILTER, а не так как у тебя....


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
Eric_Cartman
Дата 13.11.2009, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 2.3.2008

Репутация: нет
Всего: 1



Все равно та же фигня.
MisterCleric, не в курсе где можно про фильтры и в особенности про их порядок почитать более-менее адекватную информацию?

П.С. Ну кроме очевидных ответов, как то, форум Спринга, доки по СС, ествественно =)
PM MAIL   Вверх
MisterCleric
Дата 13.11.2009, 11:24 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Кажись я вижу, чего у тебя не хватает.
У тебя определен logoutFilter
Ему ты указываешь в конструкторе список LogoutHandler[]
В твоем коде там есть всего лишь SecurityContextLogoutHandler
Согласно доке:
Цитата

TokenBasedRememberMeServices also implements Spring Security's LogoutHandler interface so can be used
with to have the cookie cleared automatically.

Надо этому logoutFilter еще указать и TokenBasedRememberMeServices, что бы он инвалидировал куки и не давал срабатывать автологину.
Пробуй


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
Eric_Cartman
Дата 13.11.2009, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 2.3.2008

Репутация: нет
Всего: 1



Цитата(MisterCleric @ 13.11.2009,  11:24)
Кажись я вижу, чего у тебя не хватает.
У тебя определен logoutFilter
Ему ты указываешь в конструкторе список LogoutHandler[]
В твоем коде там есть всего лишь SecurityContextLogoutHandler
Согласно доке:
Цитата

TokenBasedRememberMeServices also implements Spring Security's LogoutHandler interface so can be used
with to have the cookie cleared automatically.

Надо этому logoutFilter еще указать и TokenBasedRememberMeServices, что бы он инвалидировал куки и не давал срабатывать автологину.
Пробуй

Да, затащило =)

Благодарю, что помог разобраться!
PM MAIL   Вверх
vicod
Дата 20.11.2009, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 24.10.2007
Где: odessa.ua

Репутация: 0
Всего: 2



Если я написал свой собственный фильтр, куда мне его добавить? обязательно в конфиге описывать все остальные фильтры?
PM MAIL   Вверх
MisterCleric
Дата 20.11.2009, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Цитата

Если я написал свой собственный фильтр, куда мне его добавить? обязательно в конфиге описывать все остальные фильтры? 


да, иначе работать не будет.
Есть конфигурация по-дефолту, а вот если мы что-то хотим еще, то обязательно надо указывать и остальное.

Вот пример моего кастомного фильтра, как я его в конфиге определяю:

Код

  <beans:bean id="propagateCallerPrincipalFilter" class="mycompany.web.spring.security.PropagateCallerPrincipalFilter">
        <custom-filter after="SERVLET_API_SUPPORT_FILTER"/>
    </beans:bean>




--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
vicod
Дата 20.11.2009, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 24.10.2007
Где: odessa.ua

Репутация: 0
Всего: 2



MisterCleric запость плз это все остальное и где вставить свой фильтр
PM MAIL   Вверх
MisterCleric
Дата 20.11.2009, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



 smile 
Давай наоборот: ты свой конфиг, а я посмотрю где, что не так.
Сам понимаешь: код-то не опенсорс...


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
vicod
Дата 20.11.2009, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 24.10.2007
Где: odessa.ua

Репутация: 0
Всего: 2



нашел уже решение

1. нужно в <security:http> тэге установить auto-config="false".
2. обычным <bean> обьявляешь свой фильтр
3. внутри него добавляешь <security:custom-filter> в котором указываешь каким по счету идет твой фильтр, можно определить перед кем или после какого фильтра, самый первый или самый последний, короче очень гибко


Это сообщение отредактировал(а) vicod - 20.11.2009, 17:44
PM MAIL   Вверх
garbuz
Дата 28.11.2009, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



Eric_Cartman, не мог бы ты выложить свою полную конфигурацию security?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0993 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.