天天看点

Spring Security学习笔记Spring Security of DefaultSecurityFilterChain框架的核心组件

Spring Security of DefaultSecurityFilterChain

SecurityContextPersistenceFilter

INFO 10220 — [ main] o.s.s.web.DefaultSecurityFilterChain : Creating filter chain: any request, [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@6d4a82, org.springframework.security.web.context.SecurityContextPersistenceFilter@16d431b4, org.springframework.security.web.header.HeaderWriterFilter@8b13d91, [email protected], org.springframework.security.web.authentication.logout.LogoutFilter@14b4340c, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@231cdda8, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@7558633, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@45037e16, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@14f060b8, org.springframework.security.web.session.SessionManagementFilter@2589d787, org.springframework.security.web.access.Exce[email protected], org.springframework.s[email protected]]

1 SecurityContextPersistenceFilter

认证相关的信息

2 UsernamePasswordAuthenticationFilter

调用身份认证器,校验身份的作用

3 AnonymousAuthenticationFilter

匿名身份的理解是Spirng Security为了整体逻辑的统一性,即使是未通过认证的用户,也给予了一个匿名身份。意味着只有在上述身份过滤器执行完毕后,SecurityContext依旧没有用户信息,AnonymousAuthenticationFilter该过滤器才会有意义——给于用户一个匿名身份。

4 ExceptionTranslationFilter

用来转换整个链路中出现的异常。一般其只处理两大类异常:AccessDeniedException访问异常和AuthenticationException认证异常。

5 FilterSecurityInterceptor

访问控制相关的操作,比对用户拥有的权限和资源所需的权限

框架的核心组件

  • SecurityContextHolder:提供对SecurityContext的访问
  • SecurityContext,:持有Authentication对象和其他可能需要的信息
  • AuthenticationManager 其中可以包含多个AuthenticationProvider
  • ProviderManager对象为AuthenticationManager接口的实现类
  • AuthenticationProvider 主要用来进行认证操作的类 调用其中的authenticate()方法去进行认证操作
  • Authentication:Spring Security方式的认证主体
  • GrantedAuthority:对认证主题的应用层面的授权,含当前用户的权限信息,通常使用角色表示
  • UserDetails:构建Authentication对象必须的信息,可以自定义,可能需要访问DB得到
  • UserDetailsService:通过username构建UserDetails对象,通过loadUserByUsername根据userName获取UserDetail对象 (可以在这里基于自身业务进行自定义的实现 如通过数据库,xml,缓存获取等)

继续阅读