`
benbenming
  • 浏览: 112250 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

通过Java实现一种常用的权限控制算法

阅读更多

这里笔者介绍一种很常用,也比较专业的权限控制思路。这里用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;
}

  当然,多权限的验证只要扩展一下就可以了。

  几点注意事项:首先,一个系统可能有很多的操作,因此,请建立数据字典,以便查阅,修改时使用。其次,如果用数据库储存用户权限,请注意数值的有效范围。操作权限值请用唯一的整数!

分享到:
评论

相关推荐

    java实现流量控制流量控制

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

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

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

    JAVA中license控制实现示例.doc

    需要注意的是,license 控制只是软件保护的一种方法,不能保证软件的绝对安全。为了确保软件的安全,需要采取多种保护措施,例如加密、数字签名、访问控制等。 本示例提供了一个基本的 license 控制实现,可以用于 ...

    经典权限管理算法

    本文将围绕一种经典的权限管理算法展开讨论,通过对算法原理的解析以及示例代码的展示,帮助读者深入理解这种算法的应用场景与实现方式。 #### 二、算法原理 该算法基于二进制位运算来实现权限管理。通过为不同的...

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

    在结合JSON Web Tokens(JWT)的情况下,可以创建一种无状态的身份验证机制,使得在分布式系统中更方便地处理权限。 首先,我们需要引入Shiro和JWT相关的依赖库。在上述描述中,可以看到引入了两个Maven依赖,分别...

    B+树算法的Java实现方法研究.pdf

    总之,B+树算法的Java实现是一种技术挑战,它需要开发者具备对数据结构和算法的深入理解,以及对Java语言特性的熟悉。通过研究和实践,可以加深对B+树在数据库索引构建和文件系统管理中应用的理解,并能够开发出性能...

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

    Java权限设置是一种常用的权限控制方法,用于控制用户对系统资源的访问权限。在Java中,我们可以使用位运算来实现权限控制。下面是Java权限设置的知识点: 1. 权限控制算法:我们可以使用位运算来实现权限控制。...

    用Java实现的远程桌面监控

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

    用java通过文件操作实现最短路径问题

    1. **Dijkstra算法**:这是一种贪心算法,从起始节点开始,逐步扩展最短路径到相邻节点,直到到达目标节点。每次选择当前未访问节点中距离起点最近的一个进行处理。在Java中,我们可以使用优先队列(PriorityQueue)...

    扫描二维码下载 JAVA实现20190403

    在IT行业中,二维码作为一种便捷的信息传递方式,被广泛应用于各种场景,如下载应用程序、访问网站、支付等。本文将深入探讨如何使用JAVA实现扫描二维码自动下载对应客户端类型的APP功能。 首先,我们需要理解...

    克贝洛斯加密算法的实现 JAVA源代码

    **克贝洛斯加密算法(Kerberos)**是一种广泛应用于网络身份验证的协议,它在信息安全领域扮演着至关重要的角色。Kerberos基于对称密钥加密技术,旨在为用户提供安全的服务,防止中间人攻击和其他形式的身份欺诈。在...

    基于Java实现的GB28181平台.zip

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

    图书馆资料检索系统(JAVA实现)

    图书馆资料检索系统是一种基于计算机技术的信息管理工具,用于高效、准确地查找和管理图书馆内的各类文献资源。在Java环境下实现的此类系统,充分利用了Java语言的跨平台特性、丰富的类库以及面向对象的设计理念,为...

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

    Apriori算法是一种基于频繁项集的挖掘方法,它通过迭代的方式生成不同支持度的频繁项集,从而找出关联规则。而FP-Growth算法则通过构建FP树来提高效率,尤其在处理大规模数据时更为高效。这两种算法的Java实现涉及...

    java实现自动补全功能

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

    java实现的考试系统

    【Java实现的考试系统】是一种基于Java编程语言开发的在线教育平台,主要用于组织、管理和进行各种类型的考试。这个系统包含了多个关键模块,旨在提供全面的考试管理服务。 1. **添加试题**:此功能允许管理员或者...

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

     WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书  Java局域网通信——飞鸽传书源代码,大家都知道VB...

    Java面试宝典(设计模式,算法,Linux篇)

    **单例模式**是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。其特点包括: 1. **单一实例**:确保类仅有一个实例。 2. **自我创建**:由单例类自己创建和管理这个唯一实例。 3. **...

    java编写bbs源码

    Java 编写的 BBS 源码是一种基于 Java 语言实现的在线讨论平台,它提供了用户交流、发帖、回帖、搜索等功能。这个论坛系统是完全由 Java 语言构建的,利用了 Java 的面向对象特性、多线程以及网络编程能力。下面将...

    java常用代码

    4. **哈弗曼编码**:哈弗曼编码是一种数据压缩技术,Java可以实现这个算法。文件可能包含构建哈弗曼树、编码和解码的过程。 5. **JDBC连接**:Java数据库连接(JDBC)是Java访问数据库的标准API。`java的jdbc连接....

Global site tag (gtag.js) - Google Analytics