1

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

我已将登录/注销添加到我的 Web 应用程序,但是会话范围的 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 没有被调用。

谢谢!

杰森

4

2 回答 2

0

我认为它不是 SessionFixationProtectionStrategy 而是 ConcurrentSessionControlStrategy。

为此代码段设置 max-sessions="-1"

于 2012-04-14T21:23:36.327 回答
0

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

于 2012-07-03T21:05:26.657 回答