【发布时间】:2011-12-07 13:08:27
【问题描述】:
我们使用 spring security 1.2.1、grails 1.3.7 和 tomcat 7.0.22 解决了以下问题。在我们的开发机器上,我们在登录我们的应用程序时没有任何问题。我认为 grails tomcat 插件使用 6.x 版本的 tomcat。我们为登录过程定义了以下测试cace:
- 删除所有 cookie
- 登录
你可以看到一个非常简单的测试用例:-)。测试结果如下:用户成功通过身份验证,但登录后被重定向到拒绝访问页面。会话已创建,因为用户能够执行其他允许的操作,并且日志显示成功的身份验证(在调试级别启用了 spring 安全日志)。那么为什么会重定向到拒绝访问页面呢?
tocmat 7.x 假定没有激活任何 cookie,并将 sessionid 添加到重定向 url 并通过“set cookie”http 标头额外设置 cookie。这就是spring security插件被混淆的地方。
j_spring_security_check 的http响应
HTTP/1.1 302 Moved Temporarily
Connection: Keep-Alive
Content-Length: 0
Date: Fri, 14 Oct 2011 06:41:59 GMT
**Location: https://myserver/main;jsessionid=8341CD832CAF4569A95BBF436395744E**
Server: Apache-Coyote/1.1
**Set-Cookie: JSESSIONID=8341CD832CAF4569A95BBF436395744E;** Path=/etsweb/; HttpOnly
后跟一个 http 获取 https://myserver/main;jsessionid=8341CD832CAF4569A95BBF436395744E
http 响应
HTTP/1.1 302 Moved Temporarily
Connection: Keep-Alive
Content-Length: 0
Date: Fri, 14 Oct 2011 06:41:59 GMT
Location: https://myserver/login/denied
Server: Apache-Coyote/1.1
解决方案是通过在 web.xml 文件中设置以下标记来禁用 url 重写
<session-config>
<tracking-mode>COOKIE</tracking-mode>
</session-config>
不知道这是spring sec的bug还是thinking的bug。
【问题讨论】:
-
请粘贴您的安全配置的相关部分。也可以看看spring security中的session fixation攻击防护机制。
-
我没有使用任何与此问题相关的特殊弹簧安全配置。我尝试启用会话固定保护,但没有成功。