跳转至
本文阅读量

1. Spring Security -- 授权(Authorization)部分

1.1 概要

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

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

1.1.1 Hierarchical Roles

1.2 请求级别的认证

1.2.1 请求匹配的方式

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

1.2.2 重要类

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

1.3 Method 级别的认证

通过 @EnableMethodSecurity 进行开启。

开启后可以使用如下几个注解

  • @PreAuthorize
  • @PostAuthorize
  • @PreFilter
  • @PostFilter

Spring Boot Starter Security 默认并没有开启 method 级别的认证

1.3.1 重要的接口或类

  • PreAuthorizeAuthorizationManager
  • PostAuthorizeAuthorizationManager
  • AuthorizationManagerBeforeMethodInterceptor
  • AuthorizationManagerAfterMethodInterceptor
  • ExceptionTranslationFilter
  • AuthorizationMethodPointcuts

每一个 Annotation 都有自己对应的 Pointcut 每一个 Annotation 都有自己对应的 Method Interceptor