spring security中几大组件的作用和执行顺序

spring security中几大组件的作用和执行顺序

在Spring Security中,AuthenticationProviderGroupPermissionEvaluatorPermissionEvaluatorAbstractAuthenticationProcessingFilterDefaultMethodSecurityExpressionHandlerManageSecurityExpressionRoot 都是与认证和授权相关的组件,它们各自有不同的职责和执行顺序。

  1. AuthenticationProvider
    AuthenticationProvider 是Spring Security中用于认证的核心接口。它负责接收一个 Authentication 对象,验证其凭据,并返回一个完全认证的 Authentication 对象,或者在认证失败时抛出 AuthenticationExceptionAuthenticationProvider 可以自定义,以支持不同类型的认证机制。

  2. GroupPermissionEvaluator
    GroupPermissionEvaluator 是一个特定于Spring Security的类,它用于评估用户是否具有对某个组的权限。这个类通常不是直接实现的,而是作为 PermissionEvaluator 的一个实现来使用。在Spring Security 5.4及更高版本中,GroupPermissionEvaluator 已经被标记为过时(deprecated),因为它的功能被合并到了更通用的 PermissionEvaluator 接口中。

  3. PermissionEvaluator
    PermissionEvaluator 接口用于在方法安全和表达式评估中确定用户是否对给定的域对象有特定的权限。它提供了两个方法:hasPermission(Authentication authentication, Object targetDomainObject, Object permission)hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission)。这些方法可以用来评估用户对特定对象的访问权限。

  4. AbstractAuthenticationProcessingFilter
    AbstractAuthenticationProcessingFilter 是一个抽象的过滤器,它处理来自用户的认证请求。它通常不直接使用,而是通过继承来实现具体的认证逻辑,如 UsernamePasswordAuthenticationFilter 用于处理表单登录。

  5. DefaultMethodSecurityExpressionHandler
    DefaultMethodSecurityExpressionHandler 是Spring Security中用于处理方法安全性表达式的处理器。它允许在方法调用中使用安全表达式,如 @PreAuthorize@PostAuthorize 等注解。

  6. ManageSecurityExpressionRoot
    ManageSecurityExpressionRoot 是一个特殊的类,它提供了对安全上下文的访问,使得在表达式中可以方便地使用 Authentication 对象和其他安全相关的信息。

执行顺序

  • AbstractAuthenticationProcessingFilter 通常在过滤器链中首先被调用,它拦截登录请求并开始认证过程。
  • AuthenticationProvider 随后被 AuthenticationManager 调用,以验证 Authentication 对象中的凭据。
  • 如果认证成功,PermissionEvaluator 可能在后续的某个点被调用,以确定已认证的用户是否具有执行特定操作的权限。
  • GroupPermissionEvaluator 作为 PermissionEvaluator 的一部分,可能在权限评估过程中被使用,尤其是在处理基于组的权限时。
  • DefaultMethodSecurityExpressionHandlerManageSecurityExpressionRoot 通常在方法安全性检查时被使用,这通常发生在认证和授权过程之后。

这些组件共同工作,提供了一个灵活且强大的认证和授权框架。

你可能感兴趣的:(java,spring)