跳转至
本文阅读量

1. Spring Security

1.1 包含模块

  • spring-security-core.jar
  • spring-security-remoting.jar
  • spring-security-web.jar
  • spring-security-config.jar
  • spring-security-ldap.jar *
  • spring-security-oauth2-core.jar
  • spring-security-oauth2-client.jar
  • spring-security-oauth2-jose.jar
  • spring-security-oauth2-resource-server.jar
  • spring-security-acl.jar
  • spring-security-cas.jar
  • spring-security-test.jar
  • spring-security-taglibs.jar

1.2 重要类

  • CsrfFilter
  • UsernamePasswordAuthenticationFilter
  • BasicAuthenticationFilter
  • AuthorizationFilter *
  • SecurityFilterChain
  • SecurityContext
  • SecurityContextHolder *
  • AuthenticationManager => 决定 Spring Security's Filters 如何进行 authentication;AuthenticationManager 是 interface, 实现类是 ProviderManager。ProviderManager 管理了多个 AuthenticationProvider,认证操作是委托给每个 provider 进行的。所以不同的认证方式,如账号密码,OAuth2 是不同的 AuthenticationProvider
    • 不同 ProviderManager 的场景是什么?
  • AuthenticationProvider
    • DaoAuthenticationProvider 用户名密码
    • JwtAuthenticationProvider
    • ... *
  • Authentication => 认证成功后的一个基本信息封装,包括人,标识,认证类型,认证成功后人拥有的权限
  • UserDetails 标识人
  • Credentials 密码/凭证
  • GrantedAuthority 权限 *
  • HttpSessionRequestCache *
  • AuthenticationException
  • AccessDeniedException

1.3 鉴权(Authentication)

1.3.1

1.4 认证(Authorization)

1.4.1 概要

  • Role-based 认证规则是以 "ROLE_" 前缀作为开头的,可以通过 GrantedAuthorityDefaults 进行自定义(需要通过 static method 进行注入)
  • Spring Security 的控制机制可以作用在方法上(method invocation),也可以作用在 web 请求上,或者 websocket 的 message 上
  • 分为 pre-invocation 决策和 post-invocation 决策

  • AuthorizationFilter 默认是在 Spring Security filter chain 中的最后一个

1.4.2 Hierarchical Roles

1.4.3 请求匹配的方式

  • 任意请求 anyrequest
  • Ant 风格的匹配
  • 正则表达式
  • 按照 HTTP 方法进行匹配
  • 按照 Dispatcher 类型匹配
  • 自定义 matcher

1.4.4 重要类

  • AuthorizationManager(取代 AccessDecisionManager 和 AccessDecisionVoter)
  • AuthorityAuthorizationManager
  • AuthenticatedAuthorizationManager
  • AuthorizationManagers 提供一些有用的静态方法
  • AuthorizationFilter => 替换 FilterSecurityInterceptor