1
回答
关于java中位运算符“&”
滴滴云服务器,限时包月0.9元,为开发者而生>>>   

情景:

    在开涛的shiro讲解第三章中,有对增删改查(0001 0010 0100 1000)对应二进制描述

    他在判断是否有权限时,写到

    this.permissionBit 是指传入的参数,other.permissionBit是系统中的比对标准

if(!(this.permissionBit ==0 || 
(this.permissionBit & other.permissionBit) != 0)) {
            return false;
}else return true;




如果有匹配的则返回true,否则false

假设参数


this.permissionBit =6
other.permissionBit=10

那么 6 (2删,4改)对应的二进制是 0110

10(2删,8查)对应的二进制是1010

当我

this.permissionBit & other.permissionBit 运算后 值应该是0010 也就是2

那上述条件!=0 成立-----返回true,判断用户拥有传入的权限6是正确的

那问题来了,事实上,用户只有2删的权限,并没有4,请问各位开源的大神,帮我解读解读,是我理解错了吗?

最好再给我一个解决办法。

<无标签>
举报
ytcray
发帖于2年前 1回/221阅
共有1个答案 最后回答: 2年前

解决了。

根据二进制鉴权的规则

(“授权码(系统中赋予用户的)”&“权限(用户请求尝试访问的权限)”=“权限”)
(other.permissionBit & this.permissionBit ) == this.permissionBit
你的this就是请求鉴权的权限,other就是系统中的授权码
6&10
0110  & 1010 = 0010 =》2   2!=10所以是失败的,也就是权限不正确
所以我觉得tao哥这里也有问题。但是改应该按照我这样

  if(!(this.permissionBit ==0 ||
(other.permissionBit & this.permissionBit) ==other.permissionBit )) {
            return false;

        }


大神们觉得对吗

顶部