• shiro


    一.认证
    subject接受token,通过其实现类DelegatingSubject将token委托给SecurityManager来完成认证。SecurityManager是接口通过DefaultSecurityManager来完成相关功能。由DefaultSecurityManager中login来完成认证过程。在login中调用了该类authenticate()来完成认证。该方法是由AuthenticatingSecurityManager(DefaultSecurityManager是其子类)来完成的。在该类的authenticate()中,通过调用authenticator(认证器)来完成认证工作。Authenticator是由默认实现类ModularRealmAuthenticator来完成认证。通过ModularRealmAuthenticator中的doAuthenticate来获取realms信息。如果是单realm直接将token和realm中的数据进行比较,判断是否认证成功。如果是多realm那么需要通过AuthenticationStrategy(认证策略)来完成对应的认证工作。

    AuthenticationStrategy(认证策略):默认
    AtLeastOneSuccessfulStrategy 至少一条满足的情况
    AllSuccessfulStrategy 所有都满足的情况
    FirstSuccessfulStrategy 第一条满足的情况

    二.授权
    hasRole 返回Boolean
    checkRole 报异常
    isPermitted 返回Boolean
    checkPermission 报异常

    a)获取subject主体
    b)判断主体是否通过认证
    c)调用subject.isPermitted*/hasRole*来进行权限的判断
      i.Subject是由其实现类DelegatingSubject来调用方法的,该类将处理交给了securityManager
      ii.security是由其实现类DefaultSecurityManager来进行处理的,该类的isPermitted()来处理,其本质是父类AuthorizingSecurityManager(DefaultSecurityManager是其子类)的isPermitted方法(DefaultSecurityManager没有重写该方法)来处理。该方法将处理交给authorizer(授权器)来处理

      iii.Authotizer由其实现类ModularRealmAuthorizer来处理,在该类有PermissioniResolver对权限字符串(页面传过来的权限信息)进行解析。该类可以调用对应的Realm来获取数据(权限信息,如从数据库获取),在Realm中也有对应的PermissionResolver交给WildcardPermissionResolver,该类调用WildcardPermission来进行权限字符串的解析。

      iv.返回处理结果

  • 相关阅读:
    题解-CF1097F Alex and a TV Show
    题解-UVA757 Gone Fishing
    题解-UVA1401 Remember the Word
    题解-UVA11732 "strcmp()" Anyone?
    【数学】[AH2017/HNOI2017]礼物
    Educational Codeforces Round 109
    KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200)
    Codeforces Global Round 14
    CF906E Reverses(H)
    【LuoguP4464】 [国家集训队] JZPKIL(M)
  • 原文地址:https://www.cnblogs.com/ezrealyi/p/13600275.html
Copyright © 2020-2023  润新知