shiro授权
授权,即访问控制,控制谁能访问哪些资源,主体进行身份认证后需要分配权限方可访问系统的资源,对于某些资源没有权限是无法访问的。
授权可简单理解为 who 对 what 进行how操作

授权方式
基于角色的访问控制 : RBAC基于角色的访问控制是以角色为中心进行控制
基于资源的访问控制 : RABC基于资源的访问控制是以资源为中心进行访问控制
权限字符串的规则: 资源标识符: 操作:资源实例标识符,意思是对哪些资源的那个实例有哪些具体的操作,“:” 是资源/操作/实例的分割符,权限字符串也可以使用* 通配副。
1、用户创建权限: user:create,或者user:create:*
2、用户修改实例001的权限:user:update:001
3、用户实例001的所有权限:user:*:001
1、角色
if(subjcet.hasRole("admin")){}
2、资源
if(subject.isPermission("user:create:001")){// 具体实例}if(subject.isPermission("user:create:*")){// 资源类型}
1、编程
if (subjcet.hasRole("admin")){}
2、注解
@RequestRoles("admin")
public void realmHello(){
}@RequiresRoles("admin")@RequiresPermissions("user:create:001")@RequestMapping("/user/test")public String userTest(){return "user/test";}
3、标签式
上述标签为jsp类型的实现,如果想用threamleaf thmeleaf的集成需要额外的部分
TestAuthorizingRealmMd5中添加 如下代码:
// 2、封装自定义 realmAuthorizingRealmMd5Customer authorizingRealmMd5Customer = new AuthorizingRealmMd5Customer();// 2.1、设置md5加密匹配器HashedCredentialsMatcher credentialsMatcher = new HashedCredentialsMatcher();credentialsMatcher.setHashAlgorithmName("md5");// 2.1、设置 散列次数credentialsMatcher.setHashIterations(12);authorizingRealmMd5Customer.setCredentialsMatcher(credentialsMatcher);// =================================================================// 添加授权的功能if (subject.isAuthenticated()){//基于角色的开发if(subject.hasRole("admin")){System.out.println(subject.hasRole("admin"));}//基于资源的开发if (subject.isPermitted("user:create:001")){System.out.println("subject:=:"+subject.isPermitted("user:*:*"));System.out.println("subject:=:"+subject.isPermitted("user:create:001"));;}}

AuthorizingRealmMd5Customer 添加代码
@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {Object primaryPrincipal = principalCollection.getPrimaryPrincipal();//根据用户名priaryPrincipal 查询数据库 查询相关的角色及资源信息SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();simpleAuthorizationInfo.addRole("admin");simpleAuthorizationInfo.addRole("user");simpleAuthorizationInfo.addStringPermission("user:create:001");return simpleAuthorizationInfo;}
subject:=:false
21:21:17.911 [main] DEBUG org.apache.shiro.realm.AuthorizingRealm - No authorizationCache instance set. Checking for a cacheManager...
21:21:17.911 [main] DEBUG org.apache.shiro.realm.AuthorizingRealm - No cache or cacheManager properties have been set. Authorization cache cannot be obtained.
subject:=:true