2014-01-10 1 views
1

Если вы хотите определить новый тип разрешения, вы должны реализовать абстрактный класс java.security.Permission. Поэтому вам нужно определить функции impl. Когда называются эти функции?Когда функции Java «подразумевают» функции, называемые?

+1

Вы добавили документы API, не так ли? Какую часть этого вы не поняли? Ответ на ваш вопрос есть. – vanza

ответ

0

Итак, очевидный ответ заключается в том, что вы открываете свою любимую среду IDE и спрашиваете ее. Там много ерунды, но и Permissions и ProtectionDomain используют его в своих методах implies.

Так что давайте начнем, где это интересно, и попытайтесь выяснить, что происходит.

AccessControlContext.checkPermission - интересный метод, если мы хотим узнать, разрешает ли acc привилегия. Среди отладочной ошибки AccessControlContext.checkPermission есть вызов ProtectionDomain.implies (через context[i]). Кажется разумным, каждый ProtectionDomain «в стеке» должен разрешить разрешение.

ProtectionDomain.implies класс implies на своем PermissionCollection. Справедливо.

PermissionCollection - это абстрактный класс, но Permissions - это реализация, на которую указывает API. Это будет называть implies на SetPermission, правильно? Нееет. Он создает специалиста PermissionCollection для каждого типа (реализации) Permission.

Специализированные коллекции - это действительно волосатая часть дизайна java.security. Чтобы взять пример, FilePermission.newPermissionCollection (я вздрагиваю при вводе) возвращает FilePermissionCollection (отображается только в документах API для целей сериализации, где это необязательно - проклинать вас, Java Serialization). FilePemrissionCollection.implies - это оптимизация, которая не вызывает FilePermission.implies, но раскрывает ее реализацию.

Как правило,не называется вообще. Вместо этого используется оптимизированная версия формы Permission.newPermissionCollection.

(Я не являюсь поклонником модели безопасности или библиотек Java 2).

Смежные вопросы