Spring Security认证成功或失败的事件监听
发布日期:2021-06-29 15:52:30 浏览次数:2 分类:技术文章

本文共 2553 字,大约阅读时间需要 8 分钟。

认证事件监听

对于每一个成功或失败的身份验证,将分别触发一个AuthenticationSuccessEventAuthenticationFailureEvent

要侦听这些事件,您必须首先发布一个AuthenticationEventPublisher。Spring Security的DefaultAuthenticationEventPublisher一般能够满足:

@Beanpublic AuthenticationEventPublisher authenticationEventPublisher        () {
return new DefaultAuthenticationEventPublisher();}

监听类

@Componentpublic class AuthenticationEvents {
@EventListener public void onSuccess(AuthenticationSuccessEvent successEvent){
System.out.println(successEvent.getAuthentication().getName()+"认证成功"); } @EventListener public void onFailure(AbstractAuthenticationFailureEvent failureDisabledEvent){
System.out.println(failureDisabledEvent.getAuthentication().getName()+"认证失败,失败原因:"+failureDisabledEvent.getException().getMessage()); }}

添加异常映射·

DefaultAuthenticationEventPublisher将为以下事件发布一个AuthenticationFailureEvent:

Exception Event
BadCredentialsException AuthenticationFailureBadCredentialsEvent
UsernameNotFoundException AuthenticationFailureBadCredentialsEvent
AccountExpiredException AuthenticationFailureExpiredEvent
ProviderNotFoundException AuthenticationFailureProviderNotFoundEvent
DisabledException AuthenticationFailureDisabledEvent
LockedException AuthenticationFailureLockedEvent
AuthenticationServiceException AuthenticationFailureServiceExceptionEvent
CredentialsExpiredException AuthenticationFailureCredentialsExpiredEvent
InvalidBearerTokenException AuthenticationFailureBadCredentialsEvent

publisher执行一个精确的Exception匹配,这意味着这些异常的子类不会产生事件。

可以通过setAdditionalExceptionMappings方法为publisher提供额外的映射:

@Beanpublic AuthenticationEventPublisher authenticationEventPublisher        (ApplicationEventPublisher applicationEventPublisher) {
Map
, Class
> mapping = Collections.singletonMap(FooException.class, FooEvent.class); AuthenticationEventPublisher authenticationEventPublisher = new DefaultAuthenticationEventPublisher(applicationEventPublisher); authenticationEventPublisher.setAdditionalExceptionMappings(mapping); return authenticationEventPublisher;}

默认事件

可以设置一个捕获所有认真异常的默认事件

@Beanpublic AuthenticationEventPublisher authenticationEventPublisher        (ApplicationEventPublisher applicationEventPublisher) {
AuthenticationEventPublisher authenticationEventPublisher = new DefaultAuthenticationEventPublisher(applicationEventPublisher); authenticationEventPublisher.setDefaultAuthenticationFailureEvent (GenericAuthenticationFailureEvent.class); return authenticationEventPublisher;}

转载地址:https://console.blog.csdn.net/article/details/116464450 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:SpringSecurity项目如何实现角色包含关系(角色继承)
下一篇:SpringSecurity如何处理logout注销操作

发表评论

最新留言

很好
[***.229.124.182]2024年04月08日 12时00分15秒