`

JAVA常见的权限控制算法的实现

阅读更多

删除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;
}
  当然,多权限的验证只要扩展一下就可以了。
  几点注意事项:首先,一个系统可能有很多的操作,因此,请建立数据字典,以便查阅,修改时使用。其次,如果用数据库储存用户权限,请注意数值的有效范围。操作权限值请用唯一的整数。

 

来源:http://www.zxbc.cn/html/20070426/7587.html

分享到:
评论
1 楼 天塔上的猫 2012-04-27  
/**
 * JAVA常见的权限控制算法的实现
 * 
 */
package sicau.edu.cn.iteye;

/**
 * @author ps
 *
 * @date 2012-4-26
 */
public class Authority {
	
	//权限元素列表
	
	int del_a = 0;  
	int add_a = 1; 
	int upd_a = 2; 
	
	int del_b = 3;
	int add_b = 4;
	int upd_b = 5;
	
	
	/**
	 * 输入参数为无限个权限元素  
	 * @param nums 拥有的权限
	 * @return 得到权限
	 */
	public int getPrivilege(int ... nums){
		
		int tot = 0;
		
		for(int i :nums){
			
			System.out.println("添加权限 " + i);
			tot = (int) (tot + Math.pow(2,i));
			 
		}
		
		System.out.println("总权限为"+tot);
		return tot;
	} 

	/**
	 * 判定tot是否有pri权限
	 * @param tot
	 * @param pri
	 * @return
	 */
	public boolean  isown(int tot,int ... pris){
		int temp =0;
		for(int pri :pris){
		temp   = temp + (int) Math.pow(2,pri);
		}
		
		return (tot&temp) == temp?true:false;
		
	}
	
	public static void main(String arg[]){
		
		Authority ao = new Authority();
		
		int key  =  ao.getPrivilege(ao.del_a,ao.add_b,ao.upd_b);
		
		System.out.println("权限和" +key);
		
		System.out.println("是否有权限 " +ao.isown(key, ao.upd_b));
	}
	
}


这文章不错啊  博主所说的应该就是上面的实现 
有个问题  权限的是有限个的 因为让int的范围限制住了

相关推荐

    Java权限控制的算法

    Java权限控制的算法,通过二进制数据来实现对权限的赋值,比对,提高了计算机运行效率也清晰一目了然

    权限控制算法的实现,很经典的

    根据给定文件的信息,本文将深入探讨一种经典的权限控制算法实现方法,并对该算法进行详细的解析。权限控制在软件系统特别是涉及用户交互的应用程序中尤为重要,它确保了不同用户角色能够访问到与其职责相匹配的数据...

    java实现流量控制流量控制

    Java作为一种广泛使用的编程语言,同样提供了多种方法来实现流量控制。本篇文章将深入探讨Java如何实现流量控制,并结合具体实例来阐述相关知识点。 首先,我们要理解流量控制的基本原理。在TCP(传输控制协议)中...

    JAVA中license控制实现示例.doc

    JAVA中license控制实现示例 在 Java 中,license 控制是指通过生成和验证数字签名来控制软件的使用权限。这种方法广泛应用于 J2EE 应用中,特别是在系统购买的早期,提供有限制的 license 文件对系统进行限制。 在...

    经典权限管理算法

    #### 三、算法实现 接下来,我们通过具体的Java代码来展示如何实现这一算法。 ```java public class PermissionManager { public static void main(String[] args) { int tmp = 11; // 假设用户权限值为11 int ...

    java的实现权限控制shiro jwt.docx

    Java中的权限控制是Web开发中一个重要的组成部分,它确保了应用程序的安全性和用户访问的合法性。Apache Shiro是一个强大且易用的Java安全框架,提供认证、授权、加密和会话管理功能,简化了处理安全需求的过程。在...

    java权限设置,和java处理字符和二进制的转换

    1. 权限控制算法:我们可以使用位运算来实现权限控制。首先,我们定义每一个操作的唯一整数值,然后使用位运算符来检查用户是否具有某个操作权限。 2. 权限值的计算:我们可以使用位运算来计算用户的权限值。例如,...

    java图形化界面实现的个人通讯录管理系统

    Java图形化界面实现的个人通讯录管理...总之,这个个人通讯录管理系统结合了Java GUI编程、数据管理、用户认证和权限控制等多个IT领域的核心知识点,是一个综合性的项目,对于学习和提升Java应用开发能力非常有帮助。

    Java 基础核心总结 +经典算法大全.rar

    访问控制权限继承 多态组合代理 向上转型static final 接口和抽象类接口 抽象类异常 认 识 Exception 什么是 Throwable 常见的 Exception 与 Exception 有关的 Java 关键字 throws 和 throw try 、finally 、catch ...

    排序算法原理与实现(java)编银行JAVA笔试题二编程资料程资料

    在这篇文章中,我们将探讨java中的排序算法原理和实现,通过java笔试题二的编程资料,帮助读者更好地理解java语言的基本概念和算法实现。 题目1:访问控制 在java中,访问控制是指控制类或类成员的可访问性。java...

    用Java实现的远程桌面监控

    在IT行业中,远程桌面监控是一种常见且实用的技术,它允许用户通过网络访问并控制远端计算机的桌面。这里我们关注的是一个用Java实现的远程桌面监控解决方案。Java作为一种跨平台的编程语言,提供了丰富的API和库,...

    java实现的本地文件管理器,java实现文件管理系统,Java

    5. 文件操作的错误处理和权限控制。 6. 可能的搜索功能实现,包括文件过滤和递归遍历。 7. 性能优化策略,如分页和懒加载。 通过实践这个项目,开发者不仅可以深入理解Java的文件操作,还能提升GUI编程和面向对象...

    基于Java的关联规则数据挖掘算法分析&学生社团管理系统设计(包含源代码+论文)

    此外,系统可能还需要实现权限控制、日志记录、异常处理等功能,这将涉及Spring Security、Log4j等相关技术。 在系统设计阶段,需要考虑到数据模型的建立,例如,学生、社团、活动等实体及其之间的关系。同时,还要...

    java源码包---java 源码 大量 实例

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    java实现自动补全功能

    在Java开发中,实现自动补全功能是一种常见的需求,特别是在Web应用中,它可以极大地提高用户输入的效率和体验。这个项目使用了Java后端技术和AJAX前端技术来完成这一功能。接下来,我们将深入探讨如何利用Java和...

    基于Java实现的GB28181平台.zip

    通过"java0323"这个文件名,我们可以推测这可能是项目的源代码或者某个开发阶段的成果,具体细节可能包括类结构、模块划分、关键算法实现等。不过,由于没有提供具体的文件内容,我们无法深入探讨这些细节。

    Java树状结构实现BBS

    在IT行业中,构建一个论坛(BBS)...同时,项目还包含了数据库操作、权限控制和高效的分页技术,这些都为提升用户体验和系统性能提供了坚实基础。通过深入学习这些知识点,开发者可以在构建类似系统时更加得心应手。

    java常见面试题目

    以下是一些Java常见的面试题目及其详细解释: 1. **Java的垃圾回收机制是什么?** Java的垃圾回收机制(Garbage Collection, GC)负责自动管理内存,通过识别不再使用的对象并释放它们占用的空间,防止内存泄漏。...

Global site tag (gtag.js) - Google Analytics