网站建设全域云,一家专门做原型的网站,wordpress js代码插件,东莞轨道公司Spring Boot集成Spring Security之实现原理 一、Spring Security实现原理概要介绍二、使用WebSecurityConfiguration向Spring容器中注册FilterChainProxy类型的对象springSecurityFilterChain1、未配置securityFilterChain过滤器链时使用默认配置用于生成默认securityFilterCha… Spring Boot集成Spring Security之实现原理 一、Spring Security实现原理概要介绍二、使用WebSecurityConfiguration向Spring容器中注册FilterChainProxy类型的对象springSecurityFilterChain1、未配置securityFilterChain过滤器链时使用默认配置用于生成默认securityFilterChain2、注册securityFilterChain过滤器链构造器3、构建FilterChainProxy类型的对象springSecurityFilterChain并注册到Spring容器中 三、使用代理模式和模板模式向Servlet容器中注册委托过滤器代理对象DelegatingFilterProxy1、初始化DelegatingFilterProxyRegistrationBean对象[上文](https://blog.csdn.net/dhbfjh/article/details/142634408)已介绍 三、使用ServletContextInitializer方式注册DelegatingFilterProxy模板模式四、请求处理流程1、servlet方式请求处理流程2、Spring Security方式请求处理流程 五、总结 一、Spring Security实现原理概要介绍
使用WebSecurityConfiguration向Spring容器中注册FilterChainProxy类型的对象springSecurityFilterChain使用SecurityFilterAutoConfiguration向Spring容器中注册DelegatingFilterProxyRegistrationBean实现了ServletContextInitializer类型对象securityFilterChainRegistration使用ServletContextInitializer方式向Servlet上下文中注册原生过滤器DelegatingFilterProxy其名称也是springSecurityFilterChain发送请求时Servlet 过滤器DelegatingFilterProxy拦截请求从Spring容器中获取名称为springSecurityFilterChain的被代理的filter对象调用该filter对象的doFilter方法 从配置的securityFilterChain过滤器链中获取匹配的过滤器链将原生的Servlet过滤器链请求对象匹配的securityFilterChain创建为新的过滤器链对象VirtualFilterChain调用VirtualFilterChain对象的doFilter方法先执行securityFilterChain过滤器链后执行原生的Servlet过滤器链
二、使用WebSecurityConfiguration向Spring容器中注册FilterChainProxy类型的对象springSecurityFilterChain
1、未配置securityFilterChain过滤器链时使用默认配置用于生成默认securityFilterChain 2、注册securityFilterChain过滤器链构造器 3、构建FilterChainProxy类型的对象springSecurityFilterChain并注册到Spring容器中 三、使用代理模式和模板模式向Servlet容器中注册委托过滤器代理对象DelegatingFilterProxy
1、初始化DelegatingFilterProxyRegistrationBean对象上文已介绍
DelegatingFilterProxyRegistrationBean类图
三、使用ServletContextInitializer方式注册DelegatingFilterProxy模板模式
ServletContextInitializer接口onStartup方法未探究该接口的实现机制后续探究RegistrationBean实现onStartup方法并调用预留抽象方法registerDynamicRegistrationBean实现register方法并调用预留抽象方法addRegistrationAbstractFilterRegistrationBean实现addRegistration方法并调用预留抽象方法getFilter获取过滤器并将过滤器注册到Servlet上下文中DelegatingFilterProxyRegistrationBean实现getFilter方法创建DelegatingFilterProxy对象并设置targetBeanName为springSecurityFilterChain和传递Spring容器上下文对象DelegatingFilterProxy对象注册到servlet上下文中未注册到Spring容器中
四、请求处理流程
1、servlet方式请求处理流程
servlet原生过滤器处理执行doFilter及之前的代码servlet处理执行service方法servlet原生过滤器处理执行doFilter之后的代码
2、Spring Security方式请求处理流程
servlet原生过滤器处理执行chain.doFilter及之前的代码 执行到DelegatingFilterProxy的doFilter方法从Spring容器中获取名称springSecurityFilterChain的FilterChainProxy对象第一次请求时执行后续不在执行调用FilterChainProxy的doFilter方法从配置的securityFilterChain过滤器链中获取匹配的过滤器链将原生的Servlet过滤器链请求对象匹配的securityFilterChain创建为新的过滤器链对象VirtualFilterChain调用VirtualFilterChain对象的doFilter方法先执行securityFilterChain过滤器链后执行原生的Servlet过滤器链 servlet处理执行service方法servlet原生过滤器处理执行chain.doFilter之后的代码 执行到DelegatingFilterProxy的doFilter之后的方法调用FilterChainProxy的doFilter之后的方法调用VirtualFilterChain对象的doFilter之后的方法执行原生的Servlet过滤器链之后的方法
五、总结
向servlet容器中注册DelegatingFilterProxyDelegatingFilterProxy代理的过滤器是类型FilterChainProxy名称是springSecurityFilterChainspringSecurityFilterChain中有securityFilterChain集合DelegatingFilterProxy.doFilter方法会调用springSecurityFilterChain.doFilter方法springSecurityFilterChain.doFilter方法会创建虚拟过滤器VirtualFilterChain并调用VirtualFilterChain.doFilter方法VirtualFilterChain.doFilter方法会先执行securityFilterChain再执行后续的原生过滤器链