Java Bitmasks и безопасность входа в систему

StackOverflow https://stackoverflow.com/questions/7348397

  •  27-10-2019
  •  | 
  •  

Вопрос

Хорошо, я не очень понимаю, как работает этот цикл, это логическое утверждение, которое меня больше всего беспокоит. Разрешения - это постоянное значение, которое я назначил 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top