Spring Security(05)授权配置授权流程分析

认证控制

springsecurity 的认证过程的处理是通过过滤器进行拦截处理的,在请求前判断是否有具体的权限来做一些控制;

基本流程是通过过滤器 拿到请求信息,交给访问决策管理器(AccessDecisionManager) 判断是否有权限,

而 访问决策管理器(AccessDecisionManager) 通过投票机制判断是否有权限,对应的实现类聚合了多个 AccessDecisionVoter (访问投票器),

对于一个请求 所有的投票器可以投出自己的一票 通过 ,拒绝 或弃权,根据投票的最终结果得出是否允许访问成功;

首先先认识几个重要的组件;

访问决策管理器 (AccessDecisionManager)

AccessDecisionManager 来处理关于访问的判断控制,在过滤器拦截后 会交给此管理器来判断是否有访问权限
核心方法是 decide 方法;

对应的实现类管理了多个 AccessDecisionVoter (访问投票器) 由多个投票器进行投票;

AbstractAccessDecisionManager

AbstractAccessDecisionManager 是公共的抽象实现,封装了公共逻辑

针对不同的投票如何处理有3个处理类;

  • AffirmativeBased 任何一个投票者 通过即为通过
  • UnanimousBased 必须所有的投票者全部通过
  • ConsensusBased 多数的投票者通过即为通过
  
  void decide(Authentication authentication, Object object, Collection<ConfigAttribute> configAttributes)
      throws AccessDeniedException, InsufficientAuthenticationException;


  boolean supports(ConfigAttribute attribute);



  boolean supports(Class<?> clazz);

访问投票器 AccessDecisionVoter

根据当前请求和权限信息决定是否通过,拒绝或弃权;

int ACCESS_GRANTED = 1;

  int ACCESS_ABSTAIN = 0;

  int ACCESS_DENIED = -1;

有多个实现类处理不同的权限投票逻辑;

  • RoleVoter 基于角色的投票
  • WebExpressionVoter 表达式的投票
  • RoleHierarchyVoter 继承 RoleVoter ,处理角色的层级结构返回给 RoleVoter
  • AuthenticatedVoter 其主要用来区分匿名用户、通过Remember-Me认证的用户和完全认证的用户。完全认证的用户是指由系统提供的登录入口进行成功登录认证的用户。
  • PreInvocationAuthorizationAdviceVoter 处理@pre 相关注解的投票认证

以RoleVoter 来说明,主要做了角色的code的比对处理返回对应的投票状态;

@Override
  public int vote(Authentication authentication, Object object, Collection<ConfigAttribute> attributes) {
    if (authentication == null) {
      return ACCESS_DENIED;
    }
    int result = ACCESS_ABSTAIN;
    Collection<? extends GrantedAuthority> authorities = extractAuthorities(authentication);
    for (ConfigAttribute attribute : attributes) {
      if (this.supports(attribute)) {
        result = ACCESS_DENIED;
        // Attempt to find a matching granted authority
        for (GrantedAuthority authority : authorities) {
          if (a
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Security 是一个用于身份验证和授权的强大架。它提供了一套完整的认证和授权流程,以下是 Spring Security 的认证授权流程: 1. 用户提交登录请求,服务器接收到请求后,进入认证过滤器链。该过滤器链由多个过滤器组成。 2. 过滤器链中的第一个过滤器是 UsernamePasswordAuthenticationFilter,它负责处理基于用户名和密码的认证方式。该过滤器将用户提交的用户名和密码封装到一个 Authentication 对象中。 3. 过滤器链中的下一个过滤器是 AuthenticationManager,它是 Spring Security 的核心接口。AuthenticationManager 负责验证 Authentication 对象的有效性。它会委托给一个或多个 AuthenticationProvider 来进行具体的认证操作。 4. AuthenticationProvider 是 AuthenticationManager 的实现类,它负责具体的认证逻辑。Spring Security 提供了多个内置的 AuthenticationProvider 实现,如 DaoAuthenticationProvider(使用数据库进行认证)、LdapAuthenticationProvider(使用 LDAP 进行认证)等。开发者也可以自定义 AuthenticationProvider。 5. 在认证过程中,AuthenticationProvider 会根据用户提供的凭证(如用户名和密码)进行认证,并生成一个经过认证的 Authentication 对象。 6. 当 AuthenticationProvider 认证成功后,Authentication 对象将被返回给 AuthenticationManager,并最终返回给 UsernamePasswordAuthenticationFilter。 7. 在认证成功后,UsernamePasswordAuthenticationFilter 会生成一个包含用户身份信息的 Authentication 对象,并将其存储在 Spring Security 的上下文中。 8. 接下来,授权过滤器链会根据请求的 URL 和用户的权限信息,决定是否允许用户访问该资源。授权过滤器链由多个过滤器组成,其中最重要的是 AccessDecisionManagerAccessDecisionVoter。 9. AccessDecisionManager授权决策的核心接口,它负责根据用户的权限信息和资源的访问要求,决定是否允许用户访问该资源。AccessDecisionManager 可以配置多个 AccessDecisionVoter,用于进行具体的授权决策。 10. AccessDecisionVoter 是 AccessDecisionManager 的实现类,它是授权决策的具体实现。Spring Security 提供了多个内置的 AccessDecisionVoter 实现,如 RoleVoter(基于角色的授权)、AuthenticatedVoter(基于认证状态的授权)等。开发者也可以自定义 AccessDecisionVoter。 以上就是 Spring Security 的认证授权流程。它通过一系列的过滤器和接口来实现用户认证和资源授权的功能,保障了应用程序的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值