0

我有以下情况:

  1. 我访问了一个 Web 应用程序——它利用了 Spring Security,在会话中创建一个对象,让我们说一个带有一些条目的购物车。
  2. 我使用 restful 客户端访问应用程序。我确实有:用户、密码、JSESSIONID cookie 及其相应的值。两者都使用基本身份验证。

结果?我拿到了那个东西——这个箱子上的购物车——但它是空的。它没有添加的条目。这几乎就像 - 即使我能够成功进行身份验证,也有一种机制可以创建对象的新实例,而不是给我现有的实例。

您是否知道弹簧安全以某种方式不允许这种情况发生。

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

任何帮助将不胜感激!

4

2 回答 2

0

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

于 2013-05-02T16:08:45.477 回答
0

SpringSecurity 在认证后替换 JSESSIONID cookie(强烈建议不要禁用该功能以防止 Session Fixation 攻击)。以下配置启用该功能

<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 - 创建一个新的“干净”会话,而不复制现有会话数据。
于 2013-05-02T13:16:58.103 回答