在成功验证后,如何在防止会话固定时强制验证身份验证对象中的会话ID?

时间:2015-05-28 23:43:04

标签: java authentication spring-security

我需要使用在成功验证后生成的新会话ID记录用户登录和注销事件,以防止会话固定。我注意到在创建新会话后,Authentication对象的Details对象中的sessionId值没有得到更新。我花了最近两天阅读了很多javadoc并在网上搜索答案。我找到了卢克泰勒的this old post。我尝试了他的建议,但它似乎没有用,所以我尝试创建一个CustomWebAuthenticationDetails,允许我将sessionId设置为新值(我无法扩展WebAuthenticationDetails,因为实例变量sessionId是最终的),然后使用CustomSessionAuthenticationStrategy扩展了SessionFixationProtectionStrategy和overrode方法onSessionChange。在此方法中,我使用包含新sessionId的CustomWebAuthenticationDetails实例更新了Authentication对象中的Details对象。这似乎有效,但是一旦我退出并重新登录,我就得到了一个java.lang.ClassCastException:org.springframework.security.web.authentication.WebAuthenticationDetails无法强制转换为org ... CustomWebAuthenticationDetails。我理解为什么我得到了异常,所以在搜索了一些之后,我尝试创建一个CustomWebAuthenticationDetailsS​​ource并将其注入UsernamePasswordAuthenticationFilter的实例,但是得到了一个错误说" authenticationManager必须被指定"。当我尝试注入AuthenticationManager时,我意识到我无法因为我在我的应用程序中使用RemoteAuthenticationManager。在这一点上,我不知道还有什么可以尝试,所以任何建议都将不胜感激。

我还想知道在创建新会话以防止会话固定后,在Authentication对象中未更新sessionId的原因。会这样做会降低应用程序的安全性吗?如果是这样,怎么样?

谢谢,

专利

0 个答案:

没有答案