我正在使用 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 没有被调用。
谢谢!
杰森