java - 如何为新登录用户创建新的 cookie Spring Security

标签 java spring-security session-cookies

我正在使用 Spring Security 3.0 和 Spring MVC。我的 Java Web 应用程序是一个购物车。我正在使用在 session 中存储购物 list 的服务,当用户 A 创建购物 list ,然后注销并再次登录时,购物 list 将恢复正常,但如果另一个用户 B 访问同一个应用程序,使用相同的浏览器并继续登录, session 将使用用户 A 的购物 list 恢复!

我能理解的是,当用户 A 在同一浏览器中注销时,JSESSION cookie 不会改变。这就是为什么如果用户 A 使用其他浏览器登录应用程序,他没有相同的 session 数据,JSESSION cookie 是不同的。

我正在使用自己的身份验证成功处理程序进行登录和注销。

    <http auto-config="true" use-expressions="true">
    <intercept-url pattern="/index.html" access="permitAll"/>
    <form-login login-page="/index.html"
              default-target-url="/index.html"
              authentication-success-handler-ref = "loginSuccessHandler"
              />

    <logout  invalidate-session="false" logout-url="/logout" success-handler-ref="logoutSuccessHandler" />
   <!-- <logout  invalidate-session="false" success-handler-ref="logoutSuccessHandler" /> -->
</http>

是的,使用 invalidate-session = "true"可能是一个短期解决方案,但这样我就无法使用 session 中保存的数据。

我想要的是,当UserA登录浏览器时,将一些数据保存到 session (购物 list ),然后注销,使UserB拥有自己的 session ,而不是使用UserA的 session ,我怀疑答案不仅将新的 cookie 分配给 userB,而且还将旧的 cookie 分配给 UserA。

最佳答案

您将得到的最接近的是 <session-managemement>元素。

  • 如果您设置 session-fixation-protection属性设置为 "migrateSession" ,新 token 将具有旧 token 的 session 属性。

  • 如果将其设置为 "newSession" session 属性将被丢弃。

请参阅SpringSecurity manual了解更多详情。

<小时/>

What i want is that when UserA log in a browser, save some data to session (the shopping list), and then logout, make UserB have his own session, instead of using the session of UserA, i suspect that the answer is in asigning a new cookie to userB, but also, to asign the old cookie to UserA.

我认为您无法通过简单地更改 session token 来实现此目的。问题是浏览器只存储一个 session token 。一旦 token 被更改,浏览器就不知道旧 token 的值,服务器也不知道谁拥有旧 token 。如果您希望购物 list 在 session 结束后(即用户 A 注销后)持续存在,则必须将其保留在其他地方。

关于java - 如何为新登录用户创建新的 cookie Spring Security,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6300299/

相关文章:

java - 是否可以使用 while 循环创建一个具有动态内存的数组,而不询问用户内存的大小?

java - Spring 2.5.6 JMX NotificationPublisher 调用抛出 NPE

python - 为什么不在每次 Flask 启动时都生成 key ?

cookies - 使用 SameSite 和 Secure 属性设置 Google 跟踪代码管理器 cookie

python - 多个 csrftoken cookie,RFC 要求只有 1 个 csrftoken 吗?

c# - 为什么在变量之后不进行转换?

java - 在Android中解析JSON数据

java - 如何使用 Spring Security 保护混合 Spring MVC + Flex 应用程序

java - 仅在特定 URL 上调用自定义 Spring Security 过滤器

spring-security - Spring websocket身份验证与spring security : 401 error