java实现权限_Java实现常用权限控制算法
一种常用的权限控制算法的实现,参考LINUX/UNIX权限编码
这里笔者介绍一种很常用,也比较专业的权限控制思路。
要换成其他的语言主,自己转一下就可以了。
这里用java语言描述,其实都差不多的。
为了方便起见,我们这里定义a^b为:a的b次方。
这里,我们为每一个操作设定一个唯一的整数值,比如:
删除A---0
修改A---1
添加A---2
删除B---3
修改B---4
添加B---5
……
理论上可以有N个操作,这取决于你用于储存用户权限值的数据类型了。
如果用户有权限:
添加A---2;
删除B---3;
修改B---4。
那用户的权限值 purview =2^2+2^3+2^4=28,就是2的权的和。化成二进制可以表示为11100。
这样,如果要验证用户是否有删除B的权限,就可以通过位与运算来实现。
在JAvA里,位与运算运算符号为&,即是:
int value = purview &((int)Math.pow(2,3));
你会发现,当用户有操作权限时,运算出来的结果都会等于这个操作需要的权限值!
原理:
位与运算,顾名思义就是对位进行与运算:
以上面的式子为例:purview & 2^3 也就是 28&8
将它们化成二进制有
11100
& 01000
-------------------
01000 == 8(十进制) == 2^3
同理,如果要验证是否有删除A---0的权限
可以用:purview &((int)Math.pow(2,0));
即:
11100
& 00001
------------------------
00000 == 0(十进制) != 2^0
这种算法的一个优点是速度快。
可以同时处理N个权限。
如果想验证是否同时有删除A---0和删除B---3的权限,可以用
purview&(2^0+2^3)==(2^0+2^3)?true:false;
设置多角色用户。根据权限值判断用户的角色。
下面提供一个java的单操作权限判断的代码:
//userPurview是用户具有的总权限
//optPurview是一个操作要求的权限为一个整数(没有经过权的!)
public static boolean checkPower(int userPurview, int optPurview)
{
int purviewValue = (int)Math.pow(2, optPurview);
return (userPurview & purviewValue) == purviewValue;
}
当然,多权限的验证只要扩展一下就可以了。
几点注意事项:
首先,一个系统可能有很多的操作,
因此,请建立数据字典,以便查阅,修改时使用。
其次,如果用数据库储存用户权限,请注意数值的有效范围。
操作权限值请用唯一的整数!
public class Limits {
/**
* 常规信息下发
*/
public static final int CGXX_XF = 0;
/**
* 常规信息列表
*/
public static final int CGXX_LB = 1;
/**
* 常规信息审核
*/
public static final int CGXX_SH = 2;
/**
* 包月用户查看
*/
public static final int BYYH_CK = 3;
/**
* 违章点播统计
*/
public static final int WZDB_TJ = 4;
/**
* 定制提取详细
*/
public static final int DZTQ_XX = 5;
/**
* 请求记录
*/
public static final int QQJL = 6;
/**
* 管理员权限
*/
public static final int GLY_QX = 7;
/**
* 验证权限
* @param limitsSum 权限总和 权限总和 为每个权限的3次方相加
* @param checkInt 具体权限
* @return
*/
public static boolean checkLimits(int limitsSum, int checkInt){
return (limitsSum & (1 << checkInt)) > 0;
}
/**
* 生成权限总值
* @param limits
* @return
*/
public static int createLimits(String[] limits){
int limitsSum = 0;
for (int i = 0; i < limits.length; i++) {
limitsSum += (1 << Integer.parseInt(limits[i]));
}
return limitsSum;
}
}
java实现权限_Java实现常用权限控制算法相关推荐
- android 获取权限管理,Android常用权限获取和设置
Android常用权限获取和设置 1 活动管理器 权限 代码 ActivityManager activityManager = (ActivityManager) getSystemService( ...
- oracle 权限控制表,Oracle 用户权限管理与常用权限数据字典列表
用户权限管理 Oracle 权限 权限允许用户访问属于其它用户的对象或执行程序,ORACLE系统提供三种权限:Object 对象级.System 系统级.Role 角色级.这些权限可以授予给用户.特殊 ...
- java 方法权限_Java控制访问权限的方法
这篇博客主要用来介绍Java中的访问权限. 引入访问控制权限 我们都知道,一个通用类库(如:JDK)开发出来的目的是让普通开发者重用以节省开发时间与精力,但是类库的设计不可能在刚开始就尽善尽美,普通开 ...
- JAVA接口的访问权限_Java中访问权限-类和接口
(1)类和接口的访问权限种类一样 , 有两中public,default,它们的不同在于是否能访问不同包中的类或接口 default:只能在本包中访问 public:任何地方都可以访问,当然不同的包中 ...
- java 对象访问权限_Java面向对象--访问权限
访问权限 1. public 公共的 2. private 私有的 3. default 包内的 package com.kjy.entity; public class Person { publi ...
- java pdf库_Java中常用的操作PDF的类库
iText iText是一个能够快速产生PDF文件的java类库.iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的.它的类库尤其与java Servlet有很好的给合.使用 ...
- java 并发实例_java一些常用并发工具示例
最近把<java并发编程实战>-Java Consurrency in Practice 重温了一遍,把书中提到的一些常用工具记录于此: 一.闭锁(门栓)- CountDownLatch ...
- java字符串切割_java字符串常用操作方法(查找、截取、分割)
如下所示: public class 字符串常用操作 { public static void main(String[] args) { /* * 查找子串 */ String str1=" ...
- java 多线程 关键字_Java多线程常用的几个关键字
Java多线程常用的几个关键字 本文是百分网小编搜索整理的关于Java多线程常用的几个关键字,供参考借鉴,希望对大家有所帮助!想了解更多相关信息请持续关注我们应届毕业生考试网! 一.同步(synchr ...
最新文章
- 心中无码,自然高清 | 联合去马赛克与超分辨率研究论文Pytorch复现
- PHP中全局变量global和$GLOBALS[]的区别分析
- Django实现对数据库数据增删改查(一)
- NEO从源码分析看网络通信
- pythonweb开发需要学哪些知识,python web需要了解哪些
- 【Java代码】京东商品全部分类数据获取(建表语句+Jar包依赖+树结构封装+爬虫源代码)包含csv和sql格式数据下载可用
- netty 粘包的解决策略
- 深度解密Go语言之sync.pool
- ios学习之旅---指针也不难
- 前端学习(654):优化插件
- Linux文档阅读笔记-cut与sort的基本用法
- 大众汽车和鸿蒙,鸿蒙系统下个月即将与大众见面,首发平台并非手机
- NRF24L01发送接收调试记录
- 经验之谈:学习 Visual Studio Code 不会错!
- 【论文】 NLP中命名实体识别从机器学习到深度学习的代表性研究
- 加油吧!数字化转型@网络电视台拿了个“云第一”
- 004-CentOS换清华源
- 如果宁静是Oracle,那万茜,张雨绮,黄圣依 是什么?(附姐姐信息表)
- 一级计算机快捷键大全,计算机快捷键大全(最全篇)
- 回首2019,瞻仰2020
热门文章
- 记一次.net core 集成vue 实践
- Git,Git Flow,GitLab使用指南
- Microsoft将在UWP上支持React Native,同时为VS Code添加工具软件
- 数学的意蕴与价值(建议收藏)
- 【遥感物候】Matlab求解一元六次多项式,计算植被生长季始期
- SQL日期时间格式自由转换大全
- SQL函数获取一年中每个月的天数
- linux网络编程之一般应用采用的协议和不同套接字的地址结构以及用户进程和内核通过哪些函数传递套接字的地址结构
- 无代码iVX编程实现简单 小蜜蜂 经典游戏
- 关于在Windows下AndroidStudio.使用React-Native开发android报错红屏“run react-native start”解决