setBit testBit权限管理(shiro项目中来的二)
一,setBit testBit权限管理的理解
1.1、jdk7文档解释
public boolean testBit(int n)
Returns true if and only if the designated bit is set. (Computes((this & (1<<n)) != 0).)
Parameters:
n - index of bit to test.
Returns:
true if and only if the designated bit is set.
Throws:
ArithmeticException -n is negative.
翻译:
当且仅当指定的位被设置时返回true。
1.2,代码
public class TestBit {
public static void main(String[] args) {
BigInteger bi = new BigInteger("12");
//testBit 的判断条件为((this & (1<<n)) != 0
System.err.println("Test Bit on " + bi + " at index 1 returns "+bi.testBit(1));
System.err.println("Test Bit on " + bi + " at index 2 returns "+bi.testBit(2));
System.err.println("Test Bit on " + bi + " at index 3 returns "+bi.testBit(3));
System.err.println("Test Bit on " + bi + " at index 4 returns "+bi.testBit(4));
//12 的二进制表示为1100
//1 的二进制表示为0001 ,1<<1 为00000010, (this & (1<<1))为0,bi.testBit(1)为FALSE
//2 的二进制表示为0010 ,1<<2 为00000100, (this & (1<<2))为4,bi.testBit(2)为true
//3 的二进制表示为0011 ,1<<3 为00001000, (this & (1<<3))为8,bi.testBit(3)为true
//4 的二进制表示为0100 ,1<<4 为00010000, (this & (1<<4))为0,bi.testBit(4)为FALSE
}
}

Test Bit on 12 at index 0 returns FALSE
因为1<<0 还是1。
1.3,java基础解释
& 既是位运算符又是逻辑运算符,&的两侧可以是int,也可以是boolean表达式,当&两侧是int时,要先把运算符两侧的数转化为二进制数再进行运算。
①12&5 的值是多少?答:12转成二进制数是1100(前四位省略了),5转成二进制数是0101,则运算后的结果为0100即4 这是两侧为数值时;
② 若 int i = 2,j = 4;则(++i=2)&(j++=4)的结果为false,其过程是这样的:先判断++i=2是否成立,这里当然是不成立了(3 == 2),但是程序还会继续判断下一个表达式是否成立,j++=4 ,该表达式是成立的,但是&运算符要求运算符两侧的值都为真,结果才为真,所以(++i=2)&(j++=4)的结果为 false
<< 移位运算符就是在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:<<(左移)、>>(带符号右移)和>>>(无符号右移)。
比如
3 << 2 过程是0011 ----》 1100
上面代码中已经解释了
//12 的二进制表示为1100
//1 的二进制表示为0001 ,1<<1 为00000010, (this & (1<<1))为0,bi.testBit(1)为FALSE
//2 的二进制表示为0010 ,1<<2 为00000100, (this & (1<<2))为4,bi.testBit(2)为true
//3 的二进制表示为0011 ,1<<3 为00001000, (this & (1<<3))为8,bi.testBit(3)为true
//4 的二进制表示为0100 ,1<<4 为00010000, (this & (1<<4))为0,bi.testBit(4)为FALSE
这里说一下&,当1100&0010时,二进制每一位上的数与操作,都为1时得1,其他情况为0,所以1100&0010为0000
1.4,setBit 的原理
BigInteger bi = new BigInteger("12");
bi =bi.setBit(2);
bi =bi.setBit(4);
bi的值将是12+2^5 =28
jdk解释:
public BigInteger setBit(int n)
Returns a BigInteger whose value is equivalent to this BigInteger with the designated bit set.- (Computes
(this | (1<<n)).)
12的二进制为00001100,
12|(1<<2)为1100|0100=1100,所以12|(1<<2)为12
12|(1<<4)为1100|0001000=00011100,12|(1<<4)为28
二,项目中的应用
2.1,testBit
public static BigInteger sumRights(String[] rights){
BigInteger num = new BigInteger("0");
for(int i=0; i<rights.length; i++){
num = num.setBit(Integer.parseInt(rights[i]));
}
return num;
}
在这里会把
[1, 2, 36, 37, 39, 38, 43, 20, 3, 40, 41]
0+2的2次方+2的36次方+2的37次方。。。。。
13125421105166
算出来一个值赋给num,并存到数据库中
2.2,testBit
public static boolean testRights(BigInteger sum,int targetRights){
return sum.testBit(targetRights);
}
在这里会把从数据库中取到的值sum13125421105166通过testBit这个方法,因为这个值是通过上面的方法来的,现在通过testBit这个方法假如在[1, 2, 36, 37, 39, 38, 43, 20, 3, 40, 41]这几个数中则返回true,否则则返回false。
setBit testBit权限管理(shiro项目中来的二)的更多相关文章
- setBit testBit权限管理
1.jdk7文档解释 public boolean testBit(int n) Returns true if and only if the designated bit is set. (Com ...
- 权限的分类(shiro项目中来的五)
第一种权限:菜单栏展示还是不展示的权限(粗颗粒) 实现方法,在SYS_ROLE表中添加一个字段rights,通过 public static BigInteger sumRights(String[] ...
- 【基于url权限管理 shiro(一)】--基础
只要有用户参与的系统一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源.权限管理包括用户认证和授权两部分. 用户认证 1.概 ...
- 《shiro》视频目录---1、权限管理-shiro
\day01_shiro\0323\10realm支持散列.avi;\day01_shiro\0323\1权限管理原理.avi;\day01_shiro\0323\2权限管理解决方案.avi;\day ...
- 在UniApp的H5项目中,生成二维码和扫描二维码的操作处理
在我们基于UniApp的H5项目中,需要生成一些二维码进行展示,另外也需要让用户可以扫码进行一定的快捷操作,本篇随笔介绍一下二维码的生成处理和基于H5的扫码进行操作.二维码的生成,使用了JS文件wea ...
- vue项目中批量打印二维码
前提:项目中要打印的二维码为后台返回,批量选择后,点击打印,先打开二维码预览界面,再执行打印. 以下代码中 codePicList为选中的二维码数组.重点css:page-break-after:al ...
- 关于写SpringBoot+Mybatisplus+Shiro项目的经验分享二:问题1
框架: SpringBoot+Mybatisplus+Shiro 简单介绍:关于写SpringBoot+Mybatisplus+Shiro项目的经验分享一:简单介绍 添加时,如果失败,不能正确跳转 c ...
- springboot+mybatis+shiro项目中使用shiro实现登录用户的权限验证。权限表、角色表、用户表。从不同的表中收集用户的权限、
要实现的目的:根据登录用户.查询出当前用户具有的所有权限.然后登录系统后.根据查询到的权限信息进行不同的操作. 以下的代码是在搭好的框架之下进行的编码. 文章目录 核心实现部分. 第一种是将用户表和角 ...
- 页面某些特定图标的权限,比如导入导出表格,下载等等,这个权限必须在有某个页面查看的权利的基础上(细粒度)(shiro项目中来的四)
一,查找按钮权限的设置 第一步:会根据用户的相关信息去查到它的角色表: SELECT * FROM SYS_USER WHERE user_id='eded77bdf35347249b2bacfa18 ...
随机推荐
- Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals)
Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals) 说一点东西: 昨天晚上$9:05$开始太不好了,我在学校学校$9:40$放 ...
- BZOJ 1037: [ZJOI2008]生日聚会Party [序列DP]
1037: [ZJOI2008]生日聚会Party Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2249 Solved: 1337[Submit] ...
- SpringMVC源码之参数解析绑定原理
摘要 本文从源码层面简单讲解SpringMVC的参数绑定原理 SpringMVC参数绑定相关组件的初始化过程 在理解初始化之前,先来认识一个接口 HandlerMethodArgumentResolv ...
- Android逆向之so的半自动化逆向
因为工作需要,转型干android逆向,有几个月了.不过对于so的逆向,任然停留在,难难难的阶段,虽然上次自己还是逆向了一个15k左右的小so文件,但是,那个基本是靠,一步一步跟代码,查看堆栈信息来自 ...
- R语言-选择样本数量
功效分析:可以帮助在给定置信度的情况下,判断检测到给定效应值时所需的样本量,也可以在给定置信水平的情况下,计算某样本量内可以检测到的给定效应值的概率 1.t检验 案例:使用手机和司机反应时间的实验 l ...
- 怎样在VS2010-2017中使用LightningChart绘图控件?
为了方便开发人员能更快速的使用开发工具,下面给大家提供LightningChart® Ultimate SDK v.8 使用手册: 1. 安装软件 - 运行 setup.exe ...
- 用Spring Tools Suite(STS)开始一个RESTful Web Service
spring.io官方提供的例子Building a RESTful Web Service提供了用Maven.Gradle.STS构建一个RESTFul Web Service,实际上采用STS构建 ...
- 游戏服务器设计之NPC系统
游戏服务器设计之NPC系统 简介 NPC系统是游戏中非常重要的系统,设计的好坏很大程度上影响游戏的体验.NPC在游戏中有如下作用: 引导玩家体验游戏内容,一般游戏内有很多主线.支线任务,而任务的介绍. ...
- MongoDB之分片集群(Sharding)
MongoDB之分片集群(Sharding) 一.基本概念 分片(sharding)是一个通过多台机器分配数据的方法.MongoDB使用分片支持大数据集和高吞吐量的操作.大数据集和高吞吐量的数据库系统 ...
- 关于字符型char变量
写程序时,意外发现个很不容易察觉问题出在哪的问题的 scanf("%c",&ch); scanf("%c",&c); printf(" ...