Spring Security 授权通知类
来源:互联网 发布:ubuntu上安装mysql 编辑:程序博客网 时间:2024/06/02 20:21
接口类AuthenticationEventPublisher定义了Spring Security中用户授权成功或失败的通知机制.
方法:
//成功时调用void publishAuthenticationSuccess(Authentication authentication);//失败时调用void publishAuthenticationFailure(AuthenticationException exception, Authentication authentication);
并且提供了一个默认的实现策略类DefaultAuthenticationEventPublisher,同时实现了接口类AuthenticationEventPublisher,ApplicationEventPublisherAware
DefaultAuthenticationEventPublisher在其内部维护一个异常类AuthenticationException和其对应的事件类AbstractAuthenticationFailureEvent的哈希表,方便将异常同授权事件对应起来.
(“成功的原因大都相似,失败的原因各种各样”)
//构造函数中初始化addMapping(BadCredentialsException.class.getName(),AuthenticationFailureBadCredentialsEvent.class);addMapping(UsernameNotFoundException.class.getName(),AuthenticationFailureBadCredentialsEvent.class);addMapping(AccountExpiredException.class.getName(),AuthenticationFailureExpiredEvent.class);
授权成功时发布事件
applicationEventPublisher.publishEvent(new AuthenticationSuccessEvent(authentication));
失败时
Constructor<? extends AbstractAuthenticationEvent> constructor = exceptionMappings.get(exception.getClass().getName());AbstractAuthenticationEvent event = null;if (constructor != null) { try { event = constructor.newInstance(authentication, exception); } catch () { }}if (event != null) { if (applicationEventPublisher != null) { applicationEventPublisher.publishEvent(event); }}
参照测试类DefaultAuthenticationEventPublisherTests可以理解其使用逻辑
publisher = new DefaultAuthenticationEventPublisher();ApplicationEventPublisher appPublisher = mock(ApplicationEventPublisher.class);publisher.setApplicationEventPublisher(appPublisher);Authentication a = mock(Authentication.class);Exception cause = new Exception();Object extraInfo = new Object();publisher.publishAuthenticationFailure(new BadCredentialsException(""), a);publisher.publishAuthenticationFailure(new BadCredentialsException("", cause), a);verify(appPublisher, times(2)).publishEvent(isA(AuthenticationFailureBadCredentialsEvent.class));
阅读全文
0 0
- Spring Security 授权通知类
- 修改spring security源码实现动态授权
- Spring Security-授权(AccessDecisionManager,AccessDecisionVoter)
- Spring Security-授权(AccessDecisionManager,AccessDecisionVoter)
- Spring security认证与授权(一)
- Spring security认证与授权(二)
- Spring security认证与授权(三)
- Spring security认证与授权(四)
- Spring Security-授权(AccessDecisionManager,AccessDecisionVoter) .
- Spring Security使用授权标签和注解
- spring security 3 自定义认证,授权示例
- spring security 3 自定义认证,授权示例
- Spring Security 可动态授权RBAC权限模块实践
- Spring Security 可动态授权RBAC权限模块实践
- 使用Spring Cloud Security OAuth2搭建授权服务
- 使用Spring Cloud Security OAuth2搭建授权服务
- 使用Spring Cloud Security OAuth2搭建授权服务
- 解决 Spring Cloud Security OAuth2搭建授权服务
- Hadoop-MapReducer 利用计数器Counters(Java)和Error output(python)计数
- Hibernate配置
- Android Studio 中的类文件前标识图标显示为 j 且敲代码时也没有提示了的问题
- spring与es集成(elasticsearch学习笔记)
- Nginx+Tomcat搭建高性能负载均衡集群
- Spring Security 授权通知类
- ART和Dalvik区别
- jessite 四
- Handler分析
- 数组中只出现一次的数字
- Xamarin.Forms 用户界面——动画——简单动画
- cc.TableView之 TableViewCell带有点击事件时 滑不动的问题
- unity blend 笔记
- 深入理解Java虚拟机 第二章 Java运行时数据区域