美文网首页
Spring Security原理分析

Spring Security原理分析

作者: LiangLliu | 来源:发表于2020-07-07 12:41 被阅读0次
  • 学习Spring Security原理,分析Spring Security的执行流程

Spring Security过滤器链

Spring Security原理分析

1、Spring Security过滤器链

  • 发起请求
  • 用于身份认证的过滤器
    • 1、UsernamePasswordAuthentication filter用于处理表单登录
    • 2、Basic Authentication filter 用于认证HttpBasic登录
    • ...
    • 上面的步骤,如果是表单登录那么久出发表单登录过滤器,否则进入Basic过滤器
      • 注意:
        • 实际应用中过滤器链不止几条,其实有很多条,不配置就不会生效
  • ExceptionTranslationFilter 过滤器
  • 根据FilerSecurity Interceptor等过滤器抛出来的异常做相应的处理,(例如没有登录,会跳到用户登录界面)
    • FilerSecurityInterceptor 过滤器
      • 是Spring Security的最后一环
    • 经过Spring Security 到达 REST API

2、Debug断点调试探究Spring Security的执行顺序

        import org.springframework.context.annotation.Configuration;
        import org.springframework.security.config.annotation.web.builders.HttpSecurity;
        import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
        
        @Configuration
        public class SecurityConfig extends WebSecurityConfigurerAdapter {
        
            @Override
            protected void configure(HttpSecurity http) throws Exception {
                http.formLogin()
                        .and()
                        .authorizeRequests()
                        .anyRequest()
                        .authenticated();
            }
        }
  • 程序首先进入FilterSecurityInterceptor
    • 程序先进入FilterSecurityInterceptor方法,因为没有携带参数,之前的过滤器都不起作用,在该过滤器中决定能否访问后面的内容,在配置中设置为所有的请求都需要进行登录认证,因此在此处会抛出异常
 InterceptorStatusToken token = super.beforeInvocation(fi);
  • 到达ExceptionTranslationFilter
    • 上一步骤中的异常到达ExceptionTranslationFilter这个拦截器中,在这个拦截器中对异常进行处理,处理实则为重定向,跳到默认的登录页面上
        * SecurityContextHolderAwareRequestFilter
        * FilterChainProxy
        * RequestCacheAwareFilter
        * DefaultLogoutPageGeneratingFilter
        * OncePerRequestFilter
        * AbstractAuthenticationProcessingFilter
        * LogoutFilter
        * HeaderWriterFilter
        * SecurityContextPersistenceFilter
        * ApplicationFilterChain
        * WebAsyncManagerIntegrationFilter
        * ...
  • 经过一些列Filter,页面被重定向到login页


    login登录界面

    * 输入用户名和密码

  • 到达断点UsernamePasswordAuthenticationFilter

    • 拿到用户名和密码
  • 达到断点FilterSecurityInterceptor
    * 处理完login跳转到之前/user的请求
    * 自定义处理完成后,前端拿到请求的内容

相关文章

网友评论

      本文标题:Spring Security原理分析

      本文链接:https://www.haomeiwen.com/subject/kbsaqktx.html