全网最全 spring常用拓展点调用顺序 说明总结图

这里先简单总结一下

/**
 *      @see BeanDefinitionRegistryPostProcessor#postProcessBeanDefinitionRegistry
 *      bean定义注册表后处理器 允许在常规 BeanFactoryPostProcessor 检测开始之前注册进一步的 bean 定义,用来动态注册beanDefinition;可以注册BeanFactoryPostProcessor类型的bean定义
 *
 *      @see BeanFactoryPostProcessor#postProcessBeanFactory
 *      应用程序上下文可以在它们的 bean 定义中自动检测 BeanFactoryPostProcessor bean,并在创建任何其他 bean 之前应用它们
 *      一般用来在读取所有的beanDefinition信息之后,实例化之前,通过该接口可进一步自行处理,比如修改beanDefinition等。
 *
 *      @see InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation
 *          在bean的几个关键节点上动手脚
 *          实例化前, 这个方法如果返回的bean不为空,会跳过Spring默认的实例化过程,
 *      - BeanPostProcessor 初始化前  初始化后
 *
 *      @see SmartInstantiationAwareBeanPostProcessor#determineCandidateConstructors
 *         确定用于给定 bean 的候选构造函数
 *
 *      @see MergedBeanDefinitionPostProcessor#postProcessMergedBeanDefinition
 *
 *      @see InstantiationAwareBeanPostProcessor#postProcessAfterInstantiation
 *          实例化后 属性填充前的回调 如果返回false postProcessPropertyValues就不会执行
 *
 *      @see SmartInstantiationAwareBeanPostProcessor#getEarlyBeanReference
 *          应用后置处理器SmartInstantiationAwareBeanPostProcessor,允许返回指定bean的早期引用,若没有则直接返回bean
 *
 *      @see InstantiationAwareBeanPostProcessor#postProcessPropertyValues
 *          5.1版本以InstantiationAwareBeanPostProcessor#postProcessProperties替代
 *           进行属性填充前的再次处理。例子:现在最常用的@Autowire属性注入就是这边注入依赖的bean实例对象
 *
 *      @see ApplicationContextAwareProcessor#invokeAwareInterfaces
 *
 *      @see BeanPostProcessor#postProcessBeforeInitialization
 *      @see PostConstruct 
 *      @see InitDestroyAnnotationBeanPostProcessor#postProcessBeforeInitialization
 *      在任何 bean 初始化回调(如 InitializingBean 的afterPropertiesSet或自定义初始化方法)之前,
 *      将此 BeanPostProcessor 应用于给定的新 bean 实例。 bean 将已填充有属性值。 返回的 bean 实例可能是原始实例的包装器
 *
 *      @see InitializingBean#afterPropertiesSet
 *          此方法允许 bean 实例在设置所有 bean 属性后执行其整体配置和最终初始化的验证
 *
 *      @see BeanPostProcessor#postProcessAfterInitialization
 *      在任何 bean 初始化回调(如 InitializingBean 的afterPropertiesSet或自定义初始化方法)之后,
 *      将此 BeanPostProcessor 应用于给定的新 bean 实例。 bean 将已填充有属性值。 返回的 bean 实例可能是原始实例的包装器。
 *      与所有其他 BeanPostProcessor 回调相比,此回调也将在由
 *      InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation方法触发的短路后调用。
 */

今天用代码验证了一下,实际的执行顺序如下

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Security是一个用于身份验证和授权的框架,它提供了一套完整的安全解决方案。在使用Spring Security时,可以通过配置一系列的过滤器来实现不同的安全功能。以下是Spring Security中常用的过滤器及其调用顺序: 1. `ChannelProcessingFilter`:用于处理HTTP和HTTPS之间的重定向。 2. `SecurityContextPersistenceFilter`:用于从`SecurityContextHolder`中获取`SecurityContext`,并将其存储在`SecurityContextHolder`中。 3. `ConcurrentSessionFilter`:用于处理并发会话控制。 4. `LogoutFilter`:用于处理用户注销操作。 5. `UsernamePasswordAuthenticationFilter`:用于处理基于用户名和密码的身份验证。 6. `DefaultLoginPageGeneratingFilter`:用于生成默认的登录页面。 7. `DefaultLogoutPageGeneratingFilter`:用于生成默认的注销页面。 8. `BasicAuthenticationFilter`:用于处理基本身份验证。 9. `RequestCacheAwareFilter`:用于处理请求缓存。 10. `SecurityContextHolderAwareRequestFilter`:用于将当前的`HttpServletRequest`包装为`SecurityContextHolderAwareRequestWrapper`,以提供更多的安全功能。 11. `AnonymousAuthenticationFilter`:用于处理匿名用户的身份验证。 12. `SessionManagementFilter`:用于处理会话管理。 13. `ExceptionTranslationFilter`:用于处理异常情况,并将其转换为适当的响应。 14. `FilterSecurityInterceptor`:用于基于访问控制决策来保护请求资源。 以上是Spring Security中常用的过滤器及其调用顺序。通过配置这些过滤器,可以实现不同的安全功能,如身份验证、授权、会话管理等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值