Java bitmasks et sécurité Connexion
Question
Ok je ne comprends pas vraiment comment fonctionne cette boucle, son compte de la logique qui me le plus de bugs. autorisations est une valeur constante que j'ai assigné 127. Roles.java contient des valeurs constantes qui déterminent quels rôles peuvent accéder à certaines pages d'un site Web. Le problème est l'instruction logique retourne vrai quand bitmask est égal à un. Comment est-ce possible?
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
}
}
La solution
L'équivalent binaire de chacun de ces nombres
127 == 1111111
1 == 1
L'opérateur retournerait bits qui sont définis dans les deux permission
ET bitMask
. Ainsi, le resuilt est
1
qui est != 0
Il est possible que permissions
devrait être 128
, parce que
128 == 10000000
Ce qui donnera le zéro que vous attendez.
Autres conseils
127 == 1.111.111, 0.000.001 == 1
127 et 1 == 1
QED.