Shiro
2019-12-04 09:42:06 0 举报
权限框架总计
作者其他创作
大纲/内容
SimplePrincipalCollection
AuthorizingRealm
AuthenticationStrategy默认提供三种实现:1.FirstSuccessfulStrategy:只要一个Realm验证成功即可,只返回第一Realm身份验证成功的认证信息2.AtLeastOneSuccessfulStrategy:只要有一个Realm验证成功即可,返回所有Realm身份验成功的认证信息3.AllSuccessfulStrategy:所有Realm验证成功才算成功,且返回所有Realm身份验证成功的认证信息
SimpleAccountRealm
Authorizer是真正的授权者,如果调用isPermitted(\"user:view\"),其首先会通过PermissionResolver把字符串转换成相应的Permission实例
Account
SaltedAuthenticationInfo
实现
Realm
SimplePrincipalMap
Iterable
Realm进行授权的话,应该继承AuthorizingRealm1.1如果调用hasRole*,直接获取AuthorizationInfo.getRoles()与传入的角色比较即可1.2.如果调用isPermitted(\"user:view\"),首先通过PermissionResolver将权限字符串转换成相应的Permission实例,默认使用WildcardPermissionResolver,即转换为通配符的WildcardPermission2.通过AuthorizationInfo.getObjectPermissions()得到Permission实例集合,通过AuthorizationInfo.getStringPermissions()得到字符串并通过PermissionResolver解析为Permission实例;然后获取用户的角色,并通过RolePermissionResolver解析角色对应的权限集合(默认没有实现,可以自己提供)3.接着调用Peimission.implies(Permission p)逐个与传入的权限比较
Authorizer会判断Realm的角色/权限是否和传入的匹配,如果有多个Realm,会委托给ModularRealmAuthorizer进行判断
调用Subject.login进行登录,其会委托给SecurityManager.login进行登录
shiro授权
AuthenticationInfo
DelegatingSubject
散列实现
RememberMeAuthenticationToken
验证密码服务
shiro登录
new IniSecurityManagerFactotry 创建一个SecurityManager工厂
PasswordMatcher
SimpleAuthenticationInfo
MutablePrincipalCollection
AbstractLdapRealm
AuthenticationInfo有两个作用1.如果Realm是AuthenticatingRealm子类,则提供给AuthenticatingRealm内部使用的CredentialsMatcher进行凭证验证2.提供给SecurityManager来创建Subject
SimpleAccount
UsernamePasswordToken
TextConfigurationRealm
可以实现记住我及主机验证的支持
AuthorizationInfo用于聚合授权信息
SimpleAuthorizationInfo
HostAuthenticationToken
调用相应的Realm获取Subject相应的角色/权限用于匹配传入的角色/权限
SecurityManager负责真正的身份验证逻辑,它会委托给Authenticator进行身份验证,Authenticator才是真正的身份验证者,SecurityManager接口继承了Authenticator
JdbcRealm
AuthorizationInfo
PrincipalCollection
PrincipalMap
自定义Realm一般继承AuthorizingRealm即可
JndiLdapRealm
IniRealm
CachingRealm
HashedCredentialsMatcher
从SecurityManagerFactory获取SecurityManager,并绑定到SecurityUtils
Serializable
MergableAuthenticationInfo用于提供在多Realm时合并AuthenticationIfno的功能,主要合并Principal,如果是其他的,会用后边的信息覆盖前边的
DefaultPasswordService
MergableAuthticationInfo
Subject
Authenticator会把相应的token传入Realm,从Realm获取身份验证信息,如果没有返回/抛出异常
PasswordService
PropertiesRealm
通过SecurityUtils获得Subject,其会自动绑定到当前线程
CredentailsMatcher
AuthenticationToken
Shiro加密
调用Subject.isPermitted*/hasRole*接口,其会委托给SecurityManager,而SecurityManager接着会委托给Authorizer
ActiveDirectoryRealm
加密密码
AuthenticatingRealm
1.getPrincipal():身份信息获取2.login: 身份验证3.hasRole:角色授权验证4.isPermitted:权限授权验证5.getSession():会话6.logout(): 退出7.runAs:A假设B身份进行访问8.execute:多线程
SecurityManager继承了Authorizer接口,且提供了ModularRealmAuthenorizer用于多Realm时的授权匹配
0 条评论
回复 删除
下一页