SpringSecurity大致流程记录

Spring Bean 管理

一、容器的生成,Bean的扫描

1、ApplicationContext 会扫描配置,将所有的Bean扫描出来

所有Bean 的相关信息都保存在BeanDefinition中

  • BeanFactory ApplicationContext 都能够理解为容器
  • BeanFactory 负责创建和获取Bean
  • ApplicationContext 功能更全面 解析配置类 注册BeanDefinition
2、初始化前的处理
  • @PostContruct 标注方法
  • 实现接口InitializingBean
  • xml 配置 init method

二、Filter and sprng Security

1、请求从发起到响应的过程;当一个请求到达Servlet Container(通常是Tomcat),容器会开始构造HttpServletRequest和HttpServletResponse对象,同时也会创建FilterChain对象,把HttpServletRequest和HttpServletResponse交由FilterChain进行处理。在这个过程中:
  • 所有Filter按照注册的顺序进行调用
  • 任一Filter可以根据实际情况决定终止调用链(调用HttpServletResposne返回),或继续传递到下游的Filter
  • 当一个请求经过了所有的Filter,最终会抵达Servlet中

replacehttps://user-images.githubusercontent.com/3600657/102799594-b51fc380-43ed-11eb-9a16-803351303cd3.png

2、SecurityFilterChain:Spring Security的核心也是FilterChain模式,只不过在Spring Security中,它维护了一套自己的FilterChain,叫SecurityFilterChain

replacehttps://user-images.githubusercontent.com/3600657/102799616-bb15a480-43ed-11eb-98e3-ba43b1dda2f8.png

在Spring Security的应用程序中,会存在2套FilterChain,分别是Servlet FilterChain和Spring SecurityFilterChain。事实上两者没有本质上的区别,甚至它们Filter的接口都是javax.servlet下的Filter。SecurityFilterChain对应的特性:
  • 和Servlet Container解耦:Spring Web Mvc底层容器是Servlet Container,而Spring Security是构建在Spring Web Mvc中的一套框架,本质上这两套是不同的体系。拆分出SecurityFilterChain逻辑上更加清晰,和底层容器的耦合也会降低。这个逻辑就跟Spring Web Mvc用一个DispatcherServlet接收所有请求再分发到Controller的思想是有点类似的。

  • 解耦Servlet Container 和 Spring IoC Container

    Spring Security对Spring框架是强依赖关系,其中大量使用了Spring Bean。对于Servlet Filter而言,本不能感知到Spring Bean。而SecurityFilterChain中的Filter,可以在上下文轻易注入Spring Bean。

3、DelegatingFilterProxy:DelegatingFilterProxy主要的作用是桥接Spring IoC Container和Servlet Container。在上面小节提到Servlet Filter无法感知Spring Bean,而DelegatingFilterProxy可以实现这一功能。
4、FilterChainProxy是一个特殊的Filter。在默认情况下,它会被注册到Spring IoC Container中,beanName为springSecurityFilterChain,同时它会被DelegatingFilterProxy持有(从Spring容器中取出),且DelegatingFilterProxy会把自己注册到ServletFilter中。

replacehttps://user-images.githubusercontent.com/3600657/102799616-bb15a480-43ed-11eb-98e3-ba43b1dda2f8.png

5、Security Filters是Spring Security设计的Filter,它和ServletFilter没有本质上的不同。只不过它单独应用于SecurityFilterChain上,这些Filter会被FilterChainProxy加载,构造出VitrualFilterChain进行过滤。下面是Spring Security内置的一些Security Filters。
  • ChannelProcessingFilter
  • WebAsyncManagerIntegrationFilter
  • SecurityContextPersistenceFilter
  • HeaderWriterFilter
  • CorsFilter
  • CsrfFilter
  • LogoutFilter
  • OAuth2AuthorizationRequestRedirectFilter
  • Saml2WebSsoAuthenticationRequestFilter
  • X509AuthenticationFilter
  • AbstractPreAuthenticatedProcessingFilter
  • CasAuthenticationFilter
  • OAuth2LoginAuthenticationFilter
  • Saml2WebSsoAuthenticationFilter
  • UsernamePasswordAuthenticationFile
    • 作用:用于处理基于用户名和密码的身份验证。
    • 当用户提交用户名和密码时,该过滤器拦截请求并尝试进行身份验证。如果认证成功,将生成一个认证成功的 Authentication 对象。
  • OpenIDAuthenticationFilter
  • DefaultLoginPageGeneratingFilter
  • DefaultLogoutPageGeneratingFilter
  • ConcurrentSessionFilter
  • DigestAuthenticationFilter
  • BearerTokenAuthenticationFilter
  • BasicAuthenticationFilter
    • 作用:用于处理基本认证(Basic Authentication)。
    • 当请求需要进行认证时,客户端会将用户名和密码以 Base64 编码的形式添加到请求头中的 Authorization 字段中。这个过滤器负责解析这些信息并进行相应的认证。
  • RequestCacheAwareFilter
  • SecurityContextHolderAwareRequestFilter
  • JaasApiIntegrationFilter
  • RememberMeAuthenticationFilter
  • AnonymousAuthenticationFilter
  • OAuth2AuthorizationCodeGrantFilter
  • SessionManagementFilter
  • ExceptionTranslationFilter
  • FilterSecurityInterceptor
    • 作用:基于访问控制决策管理的核心过滤器,负责对访问请求进行拦截和决策。
    • 在访问受保护资源时,这个过滤器会根据已配置的安全规则(如角色、权限等)进行访问控制决策,决定是否允许访问资源。
  • SwitchUserFilter
posted @ 2023-11-26 22:00  代码红了一大片  阅读(31)  评论(0编辑  收藏  举报