2021-11-15 shiro-core SimpleAccountRealm源码分析(一)

2021SC@SDUSC
SimpleAccountRealm的类继承关系图
在这里插入图片描述

1. Initializable

Shiro 容器不可知接口,指示此对象需要初始化

	//初始化这个对象
    void init() throws ShiroException;

2. RolePermissionResolverAware

标识“尽量使用已经存在的应用程序配置的RolePermissionResolver而不是由自己创建的组件实现”的接口。这主要由Authorizer和Realm实现,因为它们执行权限检查并且需要知道如何将字符串解析为Permission实例

	//在此实例上设置指定的RolePermissionResolver 
	setRolePermissionResolver(RolePermissionResolver rpr)

3. PermissionResolverAware

RolePermissionResolverAware接口的作用类似

	//在此实例上设置指定的PermissionResolver
	setPermissionResolver(PermissionResolver pr)

4. Authorizer

在这里插入图片描述

接口方法接口功能
isPermitted()如果允许相应的主题/用户操作或访问由指定权限字符串汇总的资源,则返回true
isPermittedAll()如果允许相应的主题/用户操作或访问所有指定的权限字符串,则返回true,否则返回false
checkPermission()检查相应的主题/用户是否拥有指定的权限。如果主体没有该权限,则将抛出AuthorizationException 。
checkPermissions()检查相应的主题/用户是否拥有指定的权限集。如果主体没有该权限集中的所有权限,则将抛出AuthorizationException 。
hasRole()如果相应的主题/用户具有指定的角色,则返回true,否则返回false
hasRoles()检查相应的主题/用户是否具有指定的角色,返回一个布尔数组,指示哪些角色与给定的主题相关联。这主要是一种性能增强方法,可帮助减少客户端/服务器系统中通过线路调用hasRole()的次数
hasAllRoles()如果相应的主题/用户具有所有指定的角色,则返回true,否则返回false
checkRole()判断相应的主题/用户是否具有指定的角色,如果他们是该角色,则直接返回,否则抛出AuthorizationException
checkRoles()判断相应的主题/用户是否具有指定的角色集中的所有角色,如果该角色集的所有角色对该用户都成立,则直接返回,否则抛出AuthorizationException

5. AuthenticatingRealm

AuthenticatingRealm变量
在这里插入图片描述
credentialsMatcher:凭证匹配器用于确定提供的主体是否与存储在数据库中的主体匹配。
authenticationCache:身份验证缓存
authenticationCachingEnabled:身份验证缓存是否可用
authenticationCacheName:身份验证缓存的标识名称
authenticationTokenClass:此Realm支持身份验证令牌的类,Realm.supports(AuthenticationToken)方法的默认实现通过它来确定此Realm是否支持验证给定的身份验证令牌。

AuthenticatingRealm函数方法
在这里插入图片描述

  • AuthenticatingRealm
    此realm的构造方法。
  • getCredentialsMatcher
    获取当前realm的凭证匹配器
  • setCredentialsMatcher
    设置当前realm的凭证匹配器
  • getAuthenticationTokenClass
    获取此realm支持的 authenticationToken 类。
    默认值是UsernamePasswordToken.class ,因为大约 90% 的领域使用用户名/密码认证,不管它们的协议如何。
  • setAuthenticationTokenClass
    设置此realm支持的 authenticationToken 类。
  • setAuthenticationCache
    设置显式Cache实例以用于身份验证缓存。 如果未设置并且允许身份验证缓存,则任何可用的cacheManager将用于获取缓存实例(如果存在可用的cacheManager)
  • getAuthenticationCache
    返回用于身份验证缓存的Cache实例,如果未设置缓存,则返回null
  • getAuthenticationCacheName
    获取缓存的名称,以便于查找缓存。
  • setAuthenticationCacheName
    设置缓存的名称。
  • isAuthenticationCachingEnabled
    如果已经配置了CacheManager,并且可以使用身份验证缓存,则返回true否则返回false 。
    默认值为true 。
  • setAuthenticationCachingEnabled
    如果已经配置了CacheManager则设置是否应使用身份验证缓存,默认为false 。
    默认值为false以保持与 Shiro 1.1 及更早版本的向后兼容性
  • getAvailableAuthenticationCache
    返回任何可用的Cache实例以用于身份验证缓存。 其作用如下:
  1. 如果已显式配置了authenticationCache (不为空),则返回它。
  2. 如果没有配置authenticationCache :
    a. 如果enabled身份验证缓存,则将咨询任何可用的cacheManager以获取可用的身份验证缓存。
    b. 如果身份验证缓存被禁用,这个实现不发生动作
  • getAuthenticationCacheLazy
    检查 authenticationCache 属性是否为空,如果是,则尝试从任何已配置的cacheManager获取一个。 如果获取了一个,则将其设置为该属性。 然后返回authenticationCache 。
  • getCachedAuthenticationInfo
    如果当前没有任何缓存数据,则返回与指定令牌相对应的任何缓存 AuthenticationInfo 或null 。
  • cacheAuthenticationInfoIfPossible
    如果认证成功,且缓存条件允许,则将认证信息存入缓存。
  • isAuthenticationCachingEnabled
    判断指定的AuthenticationToken或AuthenticationInfo是否可以使用身份验证缓存,如果可以则返回true否则返回false
  • assertCredentialsMatch
    判断提交的AuthenticationToken的主体与存储的帐户AuthenticationInfo的主体是否匹配,如果不匹配,则抛出AuthenticationException 。
  • getAuthenticationCacheKey
    如果启用了身份验证缓存,则返回缓存AuthenticationInfo实例的键。 此实现默认返回令牌的principal ,这在大多数应用程序中通常是用户名。
    注意:注销时缓存失效
  • clearCachedAuthenticationInfo
    清除指定帐户的 AuthenticationInfo 缓存。
    提供此方法是为了方便子类,因此当它们在运行时更改帐户的身份验证数据(例如重置密码)时,它们可以使缓存条目无效。 因为帐户的 AuthenticationInfo 可以被缓存,所以需要有一种方法来使该帐户的缓存无效,以便在帐户数据更改时后续的身份验证操作不会使用(旧)缓存值。
    调用此方法后,同一帐户的下一次身份验证将导致调用doGetAuthenticationInfo ,并且结果返回值将在返回之前缓存,以便可以重用于以后的身份验证
  • doGetAuthenticationInfo
    从数据源(RDBMS、LDAP 等)中检索给定身份验证令牌的身份验证数据。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值