首页 > 编程语言 >[SpringSecurity5.6.2源码分析二]:SecurityAutoConfiguration

[SpringSecurity5.6.2源码分析二]:SecurityAutoConfiguration

时间:2023-09-05 15:02:23浏览次数:38  
标签:SpringSecurity5.6 false public 源码 DefaultAuthenticationEventPublisher Configurat

  • • SecurityAutoConfiguration是SpringSecurity最重要的一个自动配置类
  • • 像以前版本的教程说要在启动类上配@EnableWebSecurity,现在也是由这个自动配置类负责引入
  • • 分析一 已经介绍了DefaultAuthenticationEventPublisher,所以说重点就只有使用@Import导入的三个类 , SpringBootWebSecurityConfiguration, WebSecurityEnablerConfiguration, SecurityDataConfiguration
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(DefaultAuthenticationEventPublisher.class)
@EnableConfigurationProperties(SecurityProperties.class)
@Import({ SpringBootWebSecurityConfiguration.class, WebSecurityEnablerConfiguration.class,
      SecurityDataConfiguration.class })
public class SecurityAutoConfiguration {

   /**
    * 注册一个 {@link DefaultAuthenticationEventPublisher}
    * <li>是为了在认证成功或者失败的时候能够发布对于的事件</li>
    * @param publisher
    * @return
    */
   @Bean
   @ConditionalOnMissingBean(AuthenticationEventPublisher.class)
   public DefaultAuthenticationEventPublisher authenticationEventPublisher(ApplicationEventPublisher publisher) {
      return new DefaultAuthenticationEventPublisher(publisher);
   }

}

1、SpringBootWebSecurityConfiguration

  • • 从源码能看出当容器中没有类型为WebSecurityConfigurerAdapter的Bean的时候并且当前环境为Serviet的情况下,会往容器中注册一个DefaultConfigurerAdapter
  • • 这个类就是对于SpringSecurity的过滤器链做一个默认配置,比如说开启CSRF、Session管理、默认登录登出页等等
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(WebSecurityConfigurerAdapter.class)
@ConditionalOnMissingBean(WebSecurityConfigurerAdapter.class)
@ConditionalOnWebApplication(type = Type.SERVLET)
public class SpringBootWebSecurityConfiguration {

   @Configuration(proxyBeanMethods = false)
   @Order(SecurityProperties.BASIC_AUTH_ORDER)
   static class DefaultConfigurerAdapter extends WebSecurityConfigurerAdapter {

   }

}

2、WebSecurityEnablerConfiguration

  • • 此类的核心就是导入了@EnableWebSecurity
@Configuration(proxyBeanMethods = false)
@ConditionalOnBean(WebSecurityConfigurerAdapter.class)
@ConditionalOnMissingBean(name = BeanIds.SPRING_SECURITY_FILTER_CHAIN)
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
@EnableWebSecurity
public class WebSecurityEnablerConfiguration {

}
  • • @EnableWebSecurity先是导入了三个类
  • • WebSecurityConfiguration:使用WebSecurity创建FilterChainProxy,这是注册到Tomcat容器中的过滤器链
  • • SpringWebMvcImportSelector:有关于一些SpringSecurity的参数可以借助SrpingMVC的参数解析功能进行获取的,正是因为这里注册了某些参数解析器
  • • OAuth2ImportSelector:注册一些OAuth2的类
@Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
@Target(value = { java.lang.annotation.ElementType.TYPE })
@Documented
@Import({ WebSecurityConfiguration.class,
      SpringWebMvcImportSelector.class,
      OAuth2ImportSelector.class })
@EnableGlobalAuthentication
@Configuration
public @interface EnableWebSecurity {

   /**
    * Controls debugging support for Spring Security. Default is false.
    * @return if true, enables debug support with Spring Security
    */
   boolean debug() default false;
}
  • • 后又标记了一个@EnableGlobalAuthentication,紧接着导入了AuthenticationConfiguration
  • • 而这个AuthenticationConfiguration是全局认证管理器的配置类,而认证管理器也就是整个认证的入口
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import(AuthenticationConfiguration.class)
@Configuration
public @interface EnableGlobalAuthentication {

}

3、SecurityDataConfiguration

  • • 自动添加Spring Security与Spring Data的集成
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(SecurityEvaluationContextExtension.class)
public class SecurityDataConfiguration {

   @Bean
   @ConditionalOnMissingBean
   public SecurityEvaluationContextExtension securityEvaluationContextExtension() {
      return new SecurityEvaluationContextExtension();
   }

}


标签:SpringSecurity5.6,false,public,源码,DefaultAuthenticationEventPublisher,Configurat
From: https://blog.51cto.com/u_14008019/7372704

相关文章

  • elasticsearch wildcard 慢查询原因分析(深入到源码!!!)
    大家好,我是蓝胖子,前段时间线上elasticsearch集群遇到多次wildcard产生的性能问题,elasticsearchwildcard一直是容易引发elasticsearch容易宕机的一个风险点,但究竟它为何消耗cpu呢?又该如何理解elasticsearchprofileapi的返回结果呢?在探索了部分源码后,我将在这篇文章一一揭......
  • 直播带货源码,vue 身份证校验js及其***显示
    直播带货源码,vue身份证校验js及其***显示校验js  constidCardRule=(rule,value,callback)=>{  letreg=/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/i  if(value&&!reg.test(value)){   callback(newError('身份证号格式有误'))  }else......
  • 自定义企业培训系统:源码定制与扩展指南
    在现代企业中,持续学习和培训已经成为成功的关键要素之一。企业培训系统的存在已经变得不可或缺,因为它们允许企业为员工提供高质量的培训和教育,以提高他们的技能水平并满足不断变化的业务需求。然而,通用的培训系统可能无法满足每个企业的特定需求,这就是为什么自定义企业培训系统变得......
  • 医学影像(PACS)源码,影像的获取、处理、存储、调阅、检索、管理
    医学影像(PACS)系统主要进行病人信息和影像的获取、处理、存储、调阅、检索、管理,并通过网络向全院提供病人检查影像及诊断报告;各影像科室之间共享不同设备的病人检查影像及诊断报告;在诊断工作站上,调阅HIS中病人的其它信息(如:病人信息、病历信息、医嘱、检验信息等)。系统包括:1、预......
  • 趣步卷轴模式系统开发思路介绍和部分源码
    卷轴模式任务的设计来源这里说一下卷轴模式的历史演变,最早的思路是从一些资源管理类的游戏诞生的,例如在一些资源采集模拟培养类的游戏中,涉及到木材,矿石,水银,水晶,黄金资源的建设投入,城镇内建筑生成和升级需要特定数量的资源,招募不同等级的兵种和英雄也需要特定的资源,甚至在战略类......
  • 信息打点-Web应用&源码泄漏&开源闭源&指纹识别&GIT&SVN&DS&备份
    目录信息打点-Web应用&源码泄漏&开源闭源&指纹识别&GIT&SVN&DS&备份后端-开源-指纹识别-源码下载后端-闭源源码泄漏集合:各个问题的解决使用工具:源码泄漏原因:码云资源搜索涉及平台:GITHUB资源搜索:关键字配合谷歌搜索:特征关键文件信息打点-Web应用&源码泄漏&开源闭源&指纹识别&GIT&S......
  • nginx安装 - 二进制源码编译安装(CentOS7 + nginx 1.20.2)
    Linux系统-部署-运维系列导航 Nginx介绍官方网站为:http://nginx.org/。它是一款免费开源的高性能HTTP代理服务器及反向代理服务器(ReverseProxy)产品,同时它还可以提供IMAP/POP3邮件代理服务等功能。它高并发性能很好,官方测试能够支撑5万的并发量;运行时内存和CPU占用率......
  • ECshop仿顺丰优选综合购物商城平台源码旗舰版+团购+触屏版
    源码介绍:一款时尚简洁的综合通用类模板,整站宽屏,头部含多个下拉菜单、购物车及搜索功能,方便扫描;首页商品楼层功能,调用限时抢购和下期限时抢购功能,底部调用评论功能,添加了邮件订阅。二级分类页新增自定义组合筛选、商品排序、翻页等功能;商品详情页开发单选属性、数量加减、剩余件数、......
  • 自适应红色大气虚拟手机靓号交易商城网站源码
    源码分享:靓号虚拟商城源码跟之前发布的有点不同的就是,之前的是做QQ靓号的二这个是用于做手机靓号交易平台网站的。但从布局跟设计来看我更喜欢今天发的这个,UI看上去是两年前的流行样式但是只需要简单的修改下CSS就是一个大气的手机靓号交易平台网站,源码带手机版,以及手机靓号回收功......
  • “汪星与喵星”宠物伙伴交流网站的设计与实现-计算机毕业设计源码+LW文档
    1.选题的背景和意义背景:随着时代的飞速发展,计算机已经成为我们生活中必不可少的一部分,并以其便捷的信息传输形式改变着人们以往的消费观念。随着城市经济的快速发展,人们的生活水平也在不断的提高,越来越的家庭开始选择饲养宠物作为排解压力、增添生活乐趣的方式,也有人更将宠物视为......