Spring Security原理分析

  • 学习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的请求
    * 自定义处理完成后,前端拿到请求的内容

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容