Spring Security 教程(一):简介及基本架构

2022-08-16 11:34 阅读

Spring Security学习曲线比较陡峭,因为权限本身就非常复杂,涉及到很多概念。Spring Security要比Shiro难,因为Spring Security提供的功能更多,而Shiro很多功能需要自己实现。要灵活使用Spring Security提供的功能,以及在Spring Security复杂的体系里进行扩展,则需要对Spring Security进行深入了解,否则会一筹莫展、处处受限。

选择 Spring Security 的理由

  • Spring Security 的用户量要远高于 Shiro。
  • Spring Security 功能比 Shiro 完善很多。Spring Security 在权限领域的各个方面都有较好的解决方案,比如JWT、OAuth2、单点登录、密码加密等。
  • Spring Security 与 Spring Boot 的整合更好。
  • Shiro 单点登录需要借助其它类库buji-pac4j,增加了学习成本,抵消了 Shiro 简单易学的优点。

基本架构

深入了解Spring Security之前,先了解Spring Security大致的运作原理。

首先,Spring Security使用一个过滤器DelegatingFilterProxy,插入到系统中的过滤器链FilterChain中,以发挥权限控制的功能。

DelegatingFilterProxy只是一个代理过滤器,里面会包含一系列真正需要执行的Security Filter

甚至不同地址可以执行不同的过滤器链。

Security Filter

Spring Security自带了大量的过滤器,这些过滤器有固定的执行顺序(由HttpSecurity里的FilterOrderRegistration维护)。下面按执行先后排序:

  • ForceEagerSessionCreationFilter
  • ChannelProcessingFilter
  • WebAsyncManagerIntegrationFilter
  • SecurityContextPersistenceFilter
  • HeaderWriterFilter
  • CorsFilter
  • CsrfFilter
  • LogoutFilter
  • OAuth2AuthorizationRequestRedirectFilter
  • Saml2WebSsoAuthenticationRequestFilter
  • X509AuthenticationFilter
  • AbstractPreAuthenticatedProcessingFilter
  • CasAuthenticationFilter
  • OAuth2LoginAuthenticationFilter
  • Saml2WebSsoAuthenticationFilter
  • UsernamePasswordAuthenticationFilter
  • OpenIDAuthenticationFilter
  • DefaultLoginPageGeneratingFilter
  • DefaultLogoutPageGeneratingFilter
  • ConcurrentSessionFilter
  • DigestAuthenticationFilter
  • BearerTokenAuthenticationFilter
  • BasicAuthenticationFilter
  • RequestCacheAwareFilter
  • SecurityContextHolderAwareRequestFilter
  • JaasApiIntegrationFilter
  • RememberMeAuthenticationFilter
  • AnonymousAuthenticationFilter
  • OAuth2AuthorizationCodeGrantFilter
  • SessionManagementFilter
  • ExceptionTranslationFilter
  • FilterSecurityInterceptor
  • AuthorizationFilter(官方文档暂未标记该项,但在FilterOrderRegistration源代码里存在)
  • SwitchUserFilter

通过这些过滤器,就可以实现各种权限控制的功能。过滤器虽然多,但不用一个个去记,要用到哪个了解哪个。

咨询
交流群
电话