安全SessionFixationProtectionStrategy干扰会话范围的bean

时间:2012-04-11 13:26:46

标签: session spring-mvc spring-security session-fixation

我正在使用Spring 3.1.1.Release,Security 3.1.0.Release。

我已经在我的网络应用程序中添加了登录/注销,但是会话范围的bean没有按照它的方式运行。该bean用于连接到名为CMSConnector的CMS。

为了对用户进行身份验证,我实现了一个AuthenticationProvider,在authenticate()调用中,我得到了会话范围的CMSConnector并调用了CMSConnector.login()。如果CMS登录失败,则登录失败。

问题 -

如果登录成功,则在成功登录后立即调用@predestroy logout()。然后我发现是SessionFixationProtectionStrategy正在调用上一个会话的无效并为其分配一个新会话。

session.invalidate();
session = request.getSession(true); // we now have a new session

invalidate()在会话范围的bean上调用@predestroy方法。

所以我暂时删除了@predestroy注释,使连接没有关闭。 (非常糟糕的做法。)

解决问题的方法是什么?

我尝试创建一个@PostConstruct并将登录过程放在那里,但是当调用request.getSession(true)时,不会调用@PostConstruct。

谢谢!

杰森

2 个答案:

答案 0 :(得分:0)

我认为它不是SessionFixationProtectionStrategy而是ConcurrentSessionControlStrategy。

为此代码snippet

设置max-sessions =“ - 1”

答案 1 :(得分:0)

我没有解决原来的问题,但我实现了一个解决方法 - 在会话过期对象中过期会话而不是附加@predestroy。