Shiro授权:
第一种:基于资源的授权,必须提供资源授权码才能访问相应的资源。
第二种:基于角色授权,必须获取到角色才能访问资源。
shiro认证与授权的关系:认证是授权的前提,通过了认证才能执行授权。
Java实现shiro认证流程的基本步骤:
授权方法:
自定义realm中的授权方法:
/**
*
* 授权
**/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
System.out.println("授权-------------------");
//第一种 基于资源的授权
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
info.addStringPermission("useradd");
// 第二种 : 基于角色的授权:
info.addRole("vip");
return info;
}
Shiro授权源码解读:
第一种:基于资源:
往下点:
点:
点:
调用流程:
授权源码分析【subject.isPermitted】:
DelegatingSubject【isPermitted(String permission) 】
->AuthorizingRealm【isPermitted(PrincipalCollection principals, String permission)】
->AuthorizingRealm【getAuthorizationInfo(PrincipalCollection principals) 】
info = doGetAuthorizationInfo(principals);【这里调用我们自定义的Realm的doGetAuthorizationInfo方法】
第二种:基于角色:
点:
点:
点:
总结:
【subject.hasRole】:
DelegatingSubject【hasRole(String roleIdentifier)】
->AuthorizingRealm【hasRole(PrincipalCollection principal, String roleIdentifier) 】
->AuthorizingRealm【getAuthorizationInfo(PrincipalCollection principals) 】
info = doGetAuthorizationInfo(principals);【这里调用我们自定义的Realm的doGetAuthorizationInfo方法】