SpringSecurity框架原理
2019-06-29 13:01:01 68 举报
SPringSecurity框架启动流程图
作者其他创作
大纲/内容
获取一个http实例,并通过addSecurityFilterChainBuilder方法把获取到的http实例赋值给WebSecurity的securityFilterChainBuilders属性
.@EnableWebSecurity
具体的实现逻辑在WebSecurity类中——在WebSecurityConfigurerAdapter类的init方法中获取http后赋值给了WebSecurity。因此这个地方就是调用httpSecurity的build方法。
调用getHttp()
调用设置好的SecurityConfigurer列表中每一个configurer的init方法
peformBuild()
引入了WebSecurityConfiguration
getHttp()
默认的configure(HttpSecurity http)方法继续向httpSecurity类中追加SecurityConfigurer的具体实现类
init()
这个配置方法回调用HttpSecurity的所有的配置方法,然后转换成过滤器添加到过滤器方法中
configurer()
WebSecurityConfigurerAdapter
获取到spring security的支持.
构建http
setFilterChainProxySecurityConfigurer()
ExceptionHandlingConfigurerSessionManagementConfigurerSecurityContextConfigurerRequestCacheConfigurerAnonymousConfigurerServletApiConfigurerDefaultLoginPageConfigurerLogoutConfigurerExpressionUrlAuthorizationConfigurerFormLoginConfigurerRememberMeConfigurer
实现了WebSecurityConfigurerAdapter的类就会被这个方法获取到对应的实例,排序后放到websecurity中
调用
只不过在webSecurity中SecurityConfigurer列表在默认实现下只有WebSecurityConfigurerAdapter一个,而httpSecurity中的SecurityConfigurer列表我们在WebSecurityConfigurerAdapter的init方法中设置了很多,这时就会依次调用我们设置的SecurityConfigurer的具体实现类
判断我们上一个方法中有没有获取到webSecurityConfigurers,没有的话这边会创建一个WebSecurityConfigurerAdapter实例,并追加到websecurity中。接着调用websecurity的build方法
springSecurityFilterChain()
configure(HttpSecurity http)
扩展spring security的应用
httpSecurity
webSecurity.build();
WebSecurityConfiguration
调用到了WebSecurityConfigurerAdapter的configure(WebSecurity web)方法,默认实现中这个是一个空方法,
遍历securityFilterChainBuilders属性(http实例对象)中的SecurityBuilder对象,并调用他的build方法。
使用默认配置时(大多数情况下)会为我们追加各种SecurityConfigurer的具体实现类到httpSecurity中
返回一个FilterChain
securityCinfigurer是WebsecurityConfigurerAdapter的子类对象
为WebSecurity追加了一个postBuildAction,在build都完成后从http中拿出FilterSecurityInterceptor对象并赋值给WebSecurity。
performBuild()把我们追加到HttpSecurity中的security进行了排序,用的排序类是FilterComparator,从而保证我们的filter按照正确的顺序执行接着将filters构建成filterChian返回在前面WebSecurity的performBuild方法中,这个返回值会被包装成FilterChainProxy,并作为WebSecurity的build方法的放回值。从而以springSecurityFilterChain这个名称注册到springContext中(在WebSecurityConfiguration中做的)
加入了@EnableGlobalAuthentication注解
调用configure(http)
收藏
0 条评论
回复 删除
下一页