Java Bitmasks и безопасность входа в систему
Вопрос
Хорошо, я не очень понимаю, как работает этот цикл, это логическое утверждение, которое меня больше всего беспокоит. Разрешения - это постоянное значение, которое я назначил 127. Роли. Ява содержит постоянные значения, которые определяют, какие роли могут получить доступ к определенным страницам веб -сайта. Проблема в том, что Logic оператор возвращает True, когда Bitmask равен одному. Как это возможно?
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
}
}
Решение
Бинарный эквивалент каждого из этих чисел
127 == 1111111
1 == 1
И оператор возвращают биты, которые установлены в обоих permission
А ТАКЖЕ bitMask
. Анкет Так что возобновление
1
который != 0
Возможно, что permissions
должно быть 128
, потому что
128 == 10000000
Что приведет к нулю, который вы ожидаете.
Другие советы
127 == 1111111, 1 == 0000001
127 & 1 == 1
QED.