Java -Bitmasks und Login -Sicherheit
Frage
Ok, ich verstehe nicht wirklich, wie diese Schleife funktioniert, es ist die logische Anweisung, die mich am meisten nervt. Berechtigungen sind ein konstanter Wert, den ich zugewiesen habe. Problem ist, dass die logische Anweisung true zurückgibt, wenn Bitmaske gleich ist. Wie ist das möglich?
for (int bitMask = 1; bitMask <= 0x8000; bitMask *= 2)
{
boolean hasBit = (permissions & bitMask) != 0;
if (hasBit)
{
String role = Roles.getRole(bitMask);
if (role != null)
{
//Do stuff
}
else
{
//No role assigned
}
}
Lösung
Das binäre Äquivalent jeder dieser Zahlen
127 == 1111111
1 == 1
Der und der Betreiber würden Bits zurückgeben, die in beiden festgelegt sind permission
UND bitMask
. Das resuilt ist also
1
welches ist != 0
Es ist möglich, dass permissions
sollte sein 128
, Weil
128 == 10000000
Dies würde zu der von Ihnen erwarteten Null führen.
Andere Tipps
127 == 1111111, 1 == 0000001
127 & 1 == 1
Qed.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow