我正在使用spring security处理java应用程序。
我想避免会话固定,但在文档上找到的会话固定解决方案似乎没有按预期工作...... here
所以,我在登录时这样做了
final HttpSession session = request.getSession(false);
if (session != null && !session.isNew()) {
session.invalidate();
}
效果很好,每次调用登录页面时都会更改JSESSIONID ...
但是一旦我登录,我可以再次调用登录页面,获取另一个JSESSIONID并仍然登录,我只需单击后退按钮并返回到已登录的用户区域。
它确实改变了JSESSIONID,我的问题是,它不应该有更大的影响吗?喜欢使我的会话无效或登出我?
当我调用注销表单时,它会将用户注销并按预期工作,我只是想知道更改JSESSIONID是否有实际效果或无关紧要。
任何想法?
我正在使用安全3.2
答案 0 :(得分:0)
spring's %timeit array.array('I').read(open('/dev/urandom', 'rb'), 10**6)
1 loop, best of 3: 200 ms per loop
is mapped to session
. so if a customer would have session state beans, they would be lost after changing JSESSIONID
.
even though documentation tells
Spring Security protects against this automatically by creating a new session when a user logs in
you can explicitly set configuration for session fixation by adding this
JSESSIONID
and defining <security:session-management session-authentication-strategy-ref="fixation" />
bean with fixation
class