记住我使用Spring 3.1无法通过HTTP会话

时间:2014-03-17 17:09:10

标签: java spring spring-security

我试图实现作为Spring 3.1一部分的Remember Me功能,允许客户在以前在登录表单中选择该选项时自动登录。这是我的实际实现:

在spring-security-config.xml中:

<security:http auto-config="false" entry-point-ref="myEntryPoint" request-matcher="regex" disable-url-rewriting="true">
    ...
    <security:remember-me key="mykey" authentication-success-handler-ref="rememberMeAuthenticationSuccessHandler"/>
</security:http>

<security:authentication-manager alias="authenticationManager">
    <security:authentication-provider ref="acceleratorAuthenticationProvider" />
    <security:authentication-provider ref="rememberMeAuthenticationProvider"/>
 </security:authentication-manager>

    <bean id="rememberMeAuthenticationSuccessHandler" class="uk.co.portaltech.qlaccelerator.storefront.security.RememberMeAuthenticationSuccessHandler" scope="tenant">
    <property name="myCookieStrategy" ref="myCookieStrategy" />
    <property name="customerFacade" ref="customerFacade" />
</bean>

    <bean id="rememberMeAuthenticationProvider" class="org.springframework.security.authentication.RememberMeAuthenticationProvider">
    <property name="key" value="myKey" />
</bean>

我的login.jsp包含spring rememeber me复选框:

<form:checkbox id="_spring_security_remember_me" class="rememberMe" path="_spring_security_remember_me" />

当我第一次访问该站点时(通过HTTP会话),它不会自动登录,但只要我点击登录按钮(通过HTTPS会话),它就会自动登录。

这是应该工作的方式还是我在配置中遗漏了一些东西让Spring在我访问网站时登录?

2 个答案:

答案 0 :(得分:0)

记住我让应用记住用户跨会话。意思是,如果服务器退出或用户关闭浏览器并重新打开它。在这些情况下,将不再要求用户提供其凭据。

在您描述的情况下,用户(您)输入他的凭据,然后才登录?什么是“自动”的意思?

htlpful links:

remember me result is ignored by spring security, and i am still redirected to the login page

Configuring remember-me in spring security

答案 1 :(得分:0)

检查remember-me cookie是否标记为&#34; secure&#34; (查看浏览器的cookie列表)。如果是这样,它就不会通过HTTP连接发送,这可以解释你所看到的内容。

默认情况下,如果请求是通过HTTPS创建安全cookie。您可以使用正在使用的RememberMeServices实施的useSecureCookie property进行更改。