Spring Security之 spring-Security.xml 源码分析(四)

Spring Security之 spring-Security.xml 源码分析(四)

springSecurityFilterChainSping容器初始化的一个bean,本篇文章介绍Sping容器是如何初始化springSecurityFilterChain


  1. spring-security.xmlhttp是一个自定义的标签

在这里插入图片描述

  1. http标签是自定义标签,我们可以在spring-security-config包中查看,发现http\://www.springframework.org/schema/security这个标签是在org.springframework.security.config.SecurityNamespaceHandler这个类帮我们去解析的,此处的名称空间http\://www.springframework.org/schema/securityspring-security.xml约束中的名称空间是一样的


    在这里插入图片描述

  2. 打开SecurityNamespaceHandler这个实现类,看到init()方法,它是一个初始化方法,执行一个loadParsers()方法,loadParsers()方法帮我们去加载了一些解析器


    在这里插入图片描述

  3. loadParsers()方法看到HTTP的解析器HttpSecurityBeanDefinitionParser()


    在这里插入图片描述

  4. HttpSecurityBeanDefinitionParser()这个类中parse(Element element, ParserContext pc)方法去执行解析


    在这里插入图片描述

  5. parse(Element element, ParserContext pc)方法中通过的 registerFilterChainProxyIfNecessary(pc, pc.extractSource(element))这个方法是用于注册FilterChainProxy


    在这里插入图片描述

  6. 我们来看一下registerFilterChainProxyIfNecessary(pc, pc.extractSource(element))这个方法,它在最下面把SPRING_SECURITY_FILTER_CHAIN)给注册了


    在这里插入图片描述

  7. 我们打开SPRING_SECURITY_FILTER_CHAIN),发现SPRING_SECURITY_FILTER_CHAIN)实际上就是springSecurityFilterChain这个名字,所以registerFilterChainProxyIfNecessary(pc, pc.extractSource(element))这个方法就是用来给Spring容器创建我们在web.xml看到的springSecurityFilterChain


    在这里插入图片描述

  8. 现在我们再回到parse(Element element, ParserContext pc)方法中,找到filterChains.add(createFilterChain(element, pc))这个方法


    在这里插入图片描述

  9. 打开filterChains.add(createFilterChain(element, pc))方法中的createFilterChain(element, pc)这个方法,找到new AuthenticationConfigBuilder(element, forceAutoConfig, pc, httpBldr.getSessionCreationPolicy(),查看在new的过程中执行了什么


    在这里插入图片描述

  10. 通过new AuthenticationConfigBuilder(element, forceAutoConfig, pc, httpBldr.getSessionCreationPolicy()得知它是用于加载Filter


在这里插入图片描述

  1. 通过new AuthenticationConfigBuilder(element, forceAutoConfig, pc, httpBldr.getSessionCreationPolicy()得知它是用于加载Filter,其中的createFormLoginFilter用于加载spring-Security.xml配置的页面


在这里插入图片描述


  1. 通过createFormLoginFilter我们就可以加载用于加载登录页面


在这里插入图片描述

  1. 我们再通过new AuthenticationConfigBuilder(element, forceAutoConfig, pc, httpBldr.getSessionCreationPolicy()看到createUserDetailsServiceFactory()用于实现数据库的认证操作,在我们自己的Service方法中应该扩展一个UserDetailsServiceUserDetailsService中定义了一个方法用于完成认证,而createUserDetailsServiceFactory()就是用于帮助UserDetailsService

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值