Spring Security 3 custom запомни меня - PullRequest
       0

Spring Security 3 custom запомни меня

0 голосов
/ 07 декабря 2011

я хочу изменить запомни мне параметр запроса, чтобы переопределить параметр по умолчанию '_spring_security_remember_me' и обычай мой сервис запомнить меня для замены <remember-me /> конфигурации пространства имен.

так что я настраиваю мой сервис запомнить меня:

<bean id="rememberMeServices" class="org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices">
    <property name="key" value="MY_REMEMBER_ME_KEY" />
    <property name="cookieName" value="MY_REMEMBER_ME_COOKIE" />
    <property name="parameter" value="remember" />
    <property name="tokenValiditySeconds" value="1209600" />
    <property name="useSecureCookie" value="true" />
    <property name="userDetailsService" ref="userDetailsService" />
    <property name="alwaysRemember" value="false" />
</bean>

Конфигурация пространства имен:

<intercept-url pattern="/secure/index" access="ROLE_ADMIN" />
<remember-me services-ref="rememberMeServices"/>

когда я запускаю приложение и авторизируюсь. я обнаружил, что cookie создан, затем закрываю то есть и снова открываю. введите путь '/ secure / index', tomcat покажет мне доступ запрещен. но я возвращаюсь к конфигурации по умолчанию Spring Security, все в порядке.

я найду код отладки

RememberMeAuthenticationFilter#doFilter
...
Authentication rememberMeAuth = rememberMeServices.autoLogin(request, response);
...
//autoLogin(request, response) method code.
String rememberMeCookie = extractRememberMeCookie(request);
...
protected String extractRememberMeCookie(HttpServletRequest request) {
    Cookie[] cookies = request.getCookies();

    if ((cookies == null) || (cookies.length == 0)) {
        return null;
    }

    for (int i = 0; i < cookies.length; i++) {
        if (cookieName.equals(cookies[i].getName())) {
            return cookies[i].getValue();
        }
    }

    return null;
}

в методе extractRememberMeCookie(request), код request.getCookies() всегда возвращает ноль, когда я использую свой пользовательский сервис запомнить меня, но я возвращаю пространство имен Spring Security по умолчанию <remember-me/> и делаю то же самое (чистые Cookies - вход в систему - закрытие, т.е. - повторное открытие - путь входа '/ secure / index'), я также нахожу, что cookie создает. и я отлаживаю код, который я нахожу request.getCookies() возвращает имя файла cookie 'SPRING_SECURITY_REMEMBER_ME_COOKIE' и аутентификацию успешно.

нужен другой конфиг, чтобы запомнить меня аутентификация? но я не знаю, кто-нибудь мне поможет.

Ответы [ 3 ]

2 голосов
/ 19 апреля 2013

Вашему <remember-me /> все еще нужен ключ

это должно быть

<remember-me key="MY_REMEMBER_ME_KEY" services-ref="rememberMeServices"/>
0 голосов
/ 20 июня 2014

Это на самом деле старый пост. Но у меня только что возникла проблема request.getCookies() null w / Spring 4.

Я удалил useSecureCookie = true, чтобы исправить это.

0 голосов
/ 07 декабря 2011

Согласно документации TokenBasedRememberMeServices ,

org.springframework.security.core.userdetails.UserDetailsService является требуется этой реализацией, чтобы он мог построить действительный Аутентификация из возвращенного org.springframework.security.core.userdetails.UserDetails. Это также необходимо, чтобы пароль пользователя был доступен и мог быть отмечен как часть закодированного куки.

Возможно, ваша конфигурация неверна / неполна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...