无法从Session获取对象

时间:2013-05-01 19:58:13

标签: web-services spring-security restful-authentication jsessionid

我有以下情况:

  1. 我访问了一个Web应用程序 - 利用spring安全性,在会话中创建一个对象,让我们说一个包含一些条目的购物车。
  2. 我使用一个安静的客户端访问该应用程序。我有:用户,密码,JSESSIONID cookie及其对应的值。两者都使用基本身份验证。
  3. 结果呢?我得到了这个对象 - 这个案子的推车 - 但它是空的。它没有添加的条目。它几乎就像 - 尽管我能够成功进行身份验证,但是有一种机制可以创建对象的新实例,而不是给我现有的实例。

    你是否知道弹簧安全性在某种程度上不允许这种情况发生。

    我也注意到......我发送了Cookie JSESSIONID = Number,当它响应时,它为JSESSIONID提供了一个不同的数字,我的假设是即使我有wright凭据并且它允许我登录,它不允许我使用相同的会话,它只是创建一个新的,我的购物车在那里是空的。

    任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

SpringSecurity在验证后替换JSESSIONID cookie(强烈建议不要禁用该功能以防止会话固定攻击)。 以下配置启用功能

<http ...>
    ...
    <session-management session-fixation-protection="migrateSession" />
</http>

要复制现有会话属性,请使用migrateSession

根据文档http://static.springsource.org/spring-security/site/docs/3.2.x/reference/springsecurity-single.html#session-mgmt

的属性值
  • migrateSession - 创建新会话并将现有会话属性复制到新会话。这是默认设置。
  • none - 什么都不做。原始会话将被保留。
  • newSession - 创建一个新的“干净”会话,而不复制现有的会话数据。

答案 1 :(得分:0)

Spring会在身份验证上创建一个新会话。这称为会话固定保护。在这里阅读更多相关信息: