命中 ExceptionMappingAuthenticationFailureHandler 时获取控制器类的用户 ID

Posted

技术标签:

【中文标题】命中 ExceptionMappingAuthenticationFailureHandler 时获取控制器类的用户 ID【英文标题】:get userid on Controller classes when hit ExceptionMappingAuthenticationFailureHandler 【发布时间】:2014-03-06 11:51:38 【问题描述】:

我已经设置了我的 spring 安全性,如下所示。我想在这些控制器类中获取用户 ID,以便在凭据错误时更新失败计数,或者我想将其重定向到重置密码页面,密码已过期。

提前致谢。

<beans:bean id="exceptionTranslationFilter" class="org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler">
    <beans:property name="exceptionMappings">
        <beans:props>           
            <beans:prop key="org.springframework.security.authentication.BadCredentialsException">/login_error</beans:prop>
            <beans:prop key="org.springframework.security.authentication.CredentialsExpiredException">/password_expired</beans:prop>
            <beans:prop key="org.springframework.security.authentication.LockedException">/locked</beans:prop>
            <beans:prop key="org.springframework.secuirty.authentication.DisabledException">/disabled</beans:prop>
        </beans:props>
    </beans:property>
</beans:bean>

<http use-expressions="true">
    <form-login login-page="/login" default-target-url="/" authentication-failure-handler-ref="exceptionTranslationFilter" />
</http>

【问题讨论】:

【参考方案1】:

还有一个ApplicationListener可以添加监听BadCredentials事件,看这个post

已编辑: 添加 AuthenticationSuccessHandler 怎么样,看到这个例子:Redirect to different pages after Login with Spring Security

【讨论】:

是的,我已经看到了。它适用于 BadCredentialsExceptionLockedException。但是当它击中CredentialsExpiredException。我希望它重定向到更改密码页面,这不能在 ApplicationListener 中完成 那么添加AuthenticationSuccessHandler怎么样?链接已添加到编辑后的回复中 但那是不对的..因为使用是经过身份验证的..并且用户将能够通过 URL 转到其他页面... 再说明一下,好像如果实现了AuthenticationSuccessHandler,是可以设置“authentication.setAuthenticated(false);”的在 onAuthenticationSuccess 方法中,在重定向到 changePassword 页面之前。这似乎能够阻止用户访问其他经过身份验证的页面。它还假设 changePassword 页面不应该要求用户已经过身份验证。这似乎对我有用,但还没有看到任何其他确认这种方法的帖子。并听取其他响应者建议最佳实践/方法。 谢谢..我想如果没有其他响应者,我想这将是我能想到的最好的解决方法。

以上是关于命中 ExceptionMappingAuthenticationFailureHandler 时获取控制器类的用户 ID的主要内容,如果未能解决你的问题,请参考以下文章

Ehcache中的“缓存未命中”和“内存缓存未命中”有啥区别?

vs2015当前不会命中断点因为还没有

“干净数据缓存未命中”和“脏数据缓存未命中”之间的区别

vdbench零缓存命中

用于测量 Linux 中 NUMA 节点缓存未命中/命中的工具?

windbg断点命中时,其它线程在运行吗