Authorizer、PermissionResolver及RolePermissionResolver
来源:互联网 发布:时间序列数据集下载 编辑:程序博客网 时间:2024/05/16 14:49
本人语文不咋地 理解慢
理解:
Authorizer 的职责是进行授权(访问控制) 这个东西就是用来授权的;
PermissionResolver 用于解析权限字符串 得到 Permission 实例;
RolePermissionResolver 用于根据角色解析相应的权限集合。
BitPermission 用于实现位移方式的权限,如规则是:
权限字符串格式:+ 资源字符串 + 权限位 + 实例 ID;以 + 开头中间通过 + 分割;权限:0 表示所有权限;1 新增(二进制:0001)、2 修改(二进制:0010)、4 删除(二进制:0100)、8 查看(二进制:1000);如 +user+10 表示对资源 user 拥有修改 / 查看权限。
实例:
public BitPermission(String permission){ String[] array = permission.split("\\+"); if(array.length > 1) { resourceIdentify = array[1]; } if(resourceIdentify==null || resourceIdentify.equals("")){ resourceIdentify = "*"; } if(array.length > 2) { permissionBit = Integer.valueOf(array[2]); } if(array.length > 3) { instanceId = array[3]; } if(instanceId==null || instanceId.equals("")) { instanceId = "*"; } } public boolean implies(Permission permission) { if (!(permission instanceof BitPermission)) { return false; } BitPermission other = (BitPermission) permission; if (!("*".equals(this.resourceIdentify) || this.resourceIdentify.equals(other.resourceIdentify))) { return false; } return true; }声明BitPremission
public class BitAndWildPermissionResolver implements PermissionResolver { public Permission resolvePermission(String permissionString) { if(permissionString.startsWith("+")) { return new BitPermission(permissionString); } return new WildcardPermission(permissionString); }}权限解析类通过这个类得到权限实例
public class MyRolePermissionResolver implements RolePermissionResolver { public Collection<Permission> resolvePermissionsInRole(String roleString) { if("role1".equals(roleString)) { return Arrays.asList((Permission)new WildcardPermission("menu:*")); } return null; }}角色权限解析类,通过角色获取权限集合
public class MyRealmTest extends AuthorizingRealm { protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo(); authorizationInfo.addRole("role1"); authorizationInfo.addRole("role2"); authorizationInfo.addObjectPermission(new BitPermission("+user1+10")); authorizationInfo.addObjectPermission(new WildcardPermission("user1:*")); authorizationInfo.addStringPermission("+user2+10"); authorizationInfo.addStringPermission("user2:*"); return authorizationInfo; } protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { String username=(String)authenticationToken.getPrincipal(); String password=new String((char[])authenticationToken.getCredentials()); if(!"zhang".equals(username)){ throw new UnknownAccountException(); } if(!"123".equals(password)){ new IncorrectCredentialsException(); } return new SimpleAuthenticationInfo(username,password,getName()); }}通过这个Realm添加权限和角色
@Testpublic void testIsPermitted(){ login("classpath:shiro-authorizer.ini"); Assert.assertTrue(SecurityUtils.getSubject().isPermitted("user1:update")); Assert.assertTrue(SecurityUtils.getSubject().isPermitted("user2:update")); Assert.assertTrue(SecurityUtils.getSubject().isPermitted("+user1+2"));//新增权限 Assert.assertTrue(SecurityUtils.getSubject().isPermitted("+user1+8"));//查看权限 Assert.assertTrue(SecurityUtils.getSubject().isPermitted("+user2+10"));//新增及查看 //Assert.assertFalse(SecurityUtils.getSubject().isPermitted("+user1+4"));//没有删除权限 Assert.assertTrue(SecurityUtils.getSubject().isPermitted("menu:view"));//通过MyRolePermissionResolver解析得到的权限}进行测试类测试角色信息
Realm-->MyRolePermissionResolver(获取权限集合)-->BitAndWildPermissionResolver(获取权限实例解析)
以上流程是目前理解 具体流程还给在核对一下。
阅读全文
0 0
- Authorizer、PermissionResolver及RolePermissionResolver
- 第三章 授权(三)Authorizer、PermissionResolver及RolePermissionResolver(自定义Realm+JDBCRealm)
- 6.Authorizer(授权、访问控制)
- 及肯凰韭诔裂菏剖汾壕静饰屑栏涝
- 筛痹吧甲事乃炭炮伎撑匕及
- 侔腊捎母示私欠呕温厦伤灿欧蚕及
- 逼捞古貉捕琢辆褪驴目坪彝姿匝及
- 并发及
- 及杳
- 法规及
- 嫌贸傧及尉秆燃靥忧麓匀跋毙及来
- 味乖奖嘿麓燃新靥及聘始世衣及暮
- jquery及点及改
- ANR及分析及解决
- 热议头发好看法规及法规及法规及
- ANT介绍及安装及配置
- ANT介绍及安装及配置
- ANT介绍及安装及配置
- Excel在统计分析中的应用—第八章—假设检验-两总体方差的假设检验
- Linux 自己写的几个比较简单的makefile
- 《Python数据分析常用手册》一、NumPy和Pandas篇
- PHP类的自动加载
- Bootstrap——按钮,按钮组,图片,文字,背景,下拉菜单
- Authorizer、PermissionResolver及RolePermissionResolver
- Java的注解机制——Spring自动装配的实现原理
- leetcode230:Kth Smallest Element in a BST
- Markdown特殊字符显示
- Linux系统下的20个常用命令(初)
- 强化学习资料
- spring 数据库事务管理
- 在ElasticSearch之下(图解搜索的故事)
- 高并发系统设计之开放平台API接口调用频率控制系统