我正在使用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。
谢谢!
杰森
答案 0 :(得分:0)
我认为它不是SessionFixationProtectionStrategy而是ConcurrentSessionControlStrategy。
为此代码snippet
设置max-sessions =“ - 1”答案 1 :(得分:0)
我没有解决原来的问题,但我实现了一个解决方法 - 在会话过期对象中过期会话而不是附加@predestroy。