没有 HttpSession 的 Spring Security 记住我服务

Posted

技术标签:

【中文标题】没有 HttpSession 的 Spring Security 记住我服务【英文标题】:Spring Security Remember Me service without HttpSession 【发布时间】:2012-04-20 21:17:18 【问题描述】:

我的问题类似于this one,但我可以简化一些。基本上我想通过记住我的 cookie 对用户进行身份验证,但我希望服务器端的所有内容都完全无状态,即永远不要创建 HttpSession。我有以下设置:

<security:http use-expressions="true" create-session="stateless" >
    <security:intercept-url pattern="/index.jsp" access="hasRole('ROLE_ANONYMOUS')" />
    <security:intercept-url pattern="/**" access="hasRole('ROLE_TEST')" />
    <security:form-login login-page="/index.jsp" default-target-url="/home" always-use-default-target="true" authentication-failure-url="/index.jsp?login_error=1" />
    <security:logout logout-success-url="/index.jsp"/>
    <security:remember-me key="MY_KEY" />
</security:http>

<security:authentication-manager>
    <security:authentication-provider>
        <security:user-service>
            <security:user name="testUser" password="testPassword" authorities="ROLE_TEST" />
        </security:user-service>
    </security:authentication-provider>
</security:authentication-manager>

我使用上面的用户名和密码进行了很好的身份验证,并在我的浏览器中看到了记住我的 cookie。它的那部分工作得很好。但是,我发现它在此过程中创建了一个会话。我认为create-session="stateless" 应该可以防止这种情况发生。我在这里遗漏了什么吗?

【问题讨论】:

【参考方案1】:

在处理了更多之后,我发现创建会话的不是 Spring Security。每次我点击 index.jsp 时,它都会创建一个新会话。我只是在 index.jsp 的顶部添加了&lt;%@ page session="false"&gt;,现在没有创建会话。

【讨论】:

以上是关于没有 HttpSession 的 Spring Security 记住我服务的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring Security 中检查现有的 HttpSession

Spring MVC - HttpSession.setAttribute 和 model.addObject 之间的区别

在spring中获取websocket会话的关联HTTPSession

Spring:HttpSession在集群Tomcat故障转移中为SPRING_SECURITY_CONTEXT返回了空对象

Spring Session With Redis - HttpSession (Quick Start)

使用 Spring Security 默认登录将用户放入 HttpSession 并进行身份验证