0

我的 Spring Security XML 如下:

    <http use-expressions="true">
        <intercept-url pattern="/login" access="isAnonymous()" requires-channel="https"/>
        <intercept-url pattern="/login/" access="isAnonymous()" requires-channel="https" />
        <intercept-url pattern="/logout-success" access="isAnonymous()" />
        <intercept-url pattern="/logout-success/" access="isAnonymous()" />     
        <intercept-url pattern="/logout" access="isAuthenticated()" />

        <intercept-url pattern="/**" access="hasRole('ROLE_SUPER_ADMIN')" />
        <form-login login-page="/login/" default-target-url="/example/Login_execute"/>
        <logout logout-url="/logout" logout-success-url="/logout-success" />
        <remember-me services-ref="rememberMeServices"/>

        <port-mappings>
            <port-mapping http="8080" https="8443"/>
        </port-mappings>        
    </http>

...

    <beans:bean id="userDetailsService" class="com.myownpackage.UserAccountServiceImpl"/>

    <beans:bean id="rememberMeServices" class="org.springframework.security.web.authentication.rememberme.PersistentTokenBasedRememberMeServices">
        <beans:property name="userDetailsService" ref="userDetailsService" />
        <beans:property name="tokenRepository" ref="persistentTokenRepository" />
        <beans:property name="key" value="myownkey" />
    </beans:bean>

<beans:bean id="persistentTokenRepository" class="com.myownpackage.PersistentTokenRepositoryImpl" />  

每当我登录并勾选记住我时,我的程序都会保存一些东西来记住我的数据库表(这是正确的)。

如果我关闭浏览器,重新打开浏览器并打开需要身份验证的页面,我的程序将在 PersistentTokenBasedRememberMeServices 执行 processAutoLoginCookie 并返回正确的 UserDetails(这也是正确的)

但是,即便如此,我仍然被重定向到登录页面。

顺便说一句,登录页面是自定义的,我所做的只是显示带有登录表单的 JSP 文件。

在编写 Spring Security XML 时,我是否遗漏了任何步骤?

4

1 回答 1

1

Spring Security 的“记住我”在客户端使用了一个 Cookie,也就是你的浏览器。

来自Spring 的文档

记住我或持久登录身份验证是指网站能够记住会话之间主体的身份。这通常是通过向浏览器发送 cookie 来完成的,该 cookie 在未来的会话中被检测到并导致自动登录发生。Spring Security 为这些操作的发生提供了必要的钩子,并且有两个具体的 remember-me 实现。一种使用散列来保护基于 cookie 的令牌的安全性,另一种使用数据库或其他持久存储机制来存储生成的令牌。

Spring 的想法是你将能够在不同的 Session 之间自动登录:

服务器的会话,意味着当服务器“反弹”(下降然后上升)时,例如由 Persistency 处理。

客户的会话由浏览器(Cookie)处理。浏览器使用 Spring 发送的 Cookie,Server 验证此 Cookie 并让用户自动登录,无需再次输入凭据。

检查浏览器中的 Cookie。

HTH。

哦哈德。

于 2012-09-09T11:14:39.967 回答