Spring Security Cookie удаляется, когда я захожу на страницу - PullRequest
0 голосов
/ 08 декабря 2011

Я внедряю пользовательский сервис запомнить меня, чтобы установить более высокую дату истечения срока действия Cookie «Помни меня» весны.

RememberMeService расширяет TokenBasedRememberMeService

public RememberMeService() throws Exception {
    super();
}

@Override
protected void setCookie(String[] tokens, int maxAge, HttpServletRequest request, HttpServletResponse response) {
    Integer age = 60*60*24*365*10;
    String cookieValue = encodeCookie(tokens);
    Cookie cookie = new Cookie(getCookieName(), cookieValue);
    cookie.setMaxAge(age);
    cookie.setPath(StringUtils.hasLength(request.getContextPath()) ? request.getContextPath() : "/");
    response.addCookie(cookie);
}

весна-security.xml

<remember-me services-ref="rememberMeServices" />

<beans:bean id="rememberMeServices" class="yorpackage.RememberMeService">
    <beans:property name="key" value="YASUU_REM" />
    <beans:property name="alwaysRemember" value="true" />
</beans:bean>

Все работает нормально, Cookie установлен с 10-летним сроком годности. Моя проблема заключается в том, что когда я закрываю браузер, снова открываю его и захожу на сайт, cookie удаляется, и я не могу получить автоматический вход на страницу.

Любые предложения, почему это происходит? Спасибо 4 помощь

EDIT

После некоторого исследования я вижу, что Spring находит вошедшего в систему пользователя с помощью файла cookie, loadUserByUsername () находит правильного пользователя, но автоматический вход не выполнен, и файл cookie удаляется. Почему?

Ответы [ 2 ]

0 голосов
/ 22 января 2013

Если вы используете basicAuthenticationFilter, вы можете сделать что-то подобное.

<http entry-point-ref=...>
    ...
    <custom-filter ref="basicAuthenticationFilter" position="BASIC_AUTH_FILTER" />
    <custom-filter ref="rememberMeFilter" position="REMEMBER_ME_FILTER"/>
    ...
</http>

<beans:bean id="authenticationManager"
    class="org.springframework.security.authentication.ProviderManager">
    <beans:property name="providers">
        <beans:list>
            ...
            <beans:ref bean="rememberMeAuthenticationProvider"/>
            ...
        </beans:list>
    </beans:property>
</beans:bean>

<beans:bean id="rememberMeAuthenticationProvider" class="org.springframework.security.authentication.RememberMeAuthenticationProvider">
    <beans:property name="key" value="${MY_KEY}"/>
</beans:bean>
0 голосов
/ 13 августа 2012

Вам не нужно использовать пользовательский RememberMeService, просто попробуйте это для установки собственного времени истечения:

<beans:bean id="rememberMeServices" class="org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices">
    <beans:property name="key" value="YASUU_REM"/>
    <beans:property name="tokenValiditySeconds" value="315360000"/>
</beans:bean>

И если вам все еще нужно решить проблему с удалением куки после успешной аутентификации, попробуйте добавить следующее:

<http>
    <remember-me services-ref="rememberMeServices" key="YASUU_REM" />
</http>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...