Spec-Zone .ru
спецификации, руководства, описания, API
След: Средства защиты в Java SE
Урок: Реализация Вашего Собственного Разрешения
Демонстрационный Файл Политики
Домашняя страница > Средства защиты в Java SE > Реализация Вашего Собственного Разрешения

Демонстрационный Файл Политики

Ниже полный файл политики для пользователя, желающего работать ExampleGame.

Синтаксис файла политики не описывается здесь; если Вам интересно, см. страницу Синтаксиса Файла Реализации и Политики Политики Значения по умолчанию.

Вы не должны знать синтаксис; можно всегда использовать Средство осуществления политики, чтобы создать файлы политики, как показано на Быстром Туре по Управлению Апплетами, Быстрым Туром по Управлению Приложениями, и Подписанию Кода и Предоставлению Этого уроки Полномочий.

Ниже демонстрационный файл политики, сопровождаемый описанием отдельных записей. Примите это

Вот файл политики: kim.policy

keystore "kim.keystore";

// Here is the permission ExampleGame needs.
// It grants code signed by "terry" the
// HighScorePermission, if the
// HighScorePermission was signed by "chris"
grant SignedBy "terry" {
  permission
    com.scoredev.scores.HighScorePermission
      "ExampleGame", signedBy "chris";
};

// Here is the set of permissions the HighScore
// class needs:
grant SignedBy "chris" {
  // The HighScore class needs permission to read
  // "user.home" to find the location of the
  // highscore file

  permission java.util.PropertyPermission
    "user.home", "read";

  // It needs permission to read and write the
  // high score file itself

  permission java.io.FilePermission
      "${user.home}${/}.highscore", "read,write";

  // It needs to get granted its own permission,
  // so it can call checkPermission
  // to see if its caller has permission.
  // Only grant it the permission
  // if the permission itself was signed by
  // "chris"

  permission
    com.scoredev.scores.HighScorePermission 
      "*", signedBy "chris";
};


Запись Keystore

keystore является репозитарием ключей и сертификатов, и используется, чтобы искать открытые ключи подписывающих лиц, определенных в файле политики ("terry" и "chris" в этом примере).

keytool утилита используется, чтобы создать и администрировать keystores.

Для этого урока предположите, что Ким хотел бы играть ExampleGame. Если keystore Кима называют kim.keystore, тогда файл политики Кима нуждается в следующей строке в самом начале:

keystore "kim.keystore";

Запись ExampleGame

Запись файла политики определяет, что одни или более полномочий для кода из определенного источника кода - или кодируют от определенного расположения (URL), или кодируют подписанный определенным объектом, или обоими.

Наш файл политики нуждается в записи для каждой игры, предоставляя код, подписанный ключом от создателя той игры a HighScorePermission чье имя является игровым именем. То разрешение позволяет игре вызывать HighScore методы, чтобы добраться или обновить высокое значение счета пользователя для той определенной игры.

Запись, требуемая для ExampleGame :

grant SignedBy "terry" {
    permission
        com.scoredev.scores.HighScorePermission 
            "ExampleGame", signedBy "chris";
};

Требование этого ExampleGame будьте подписаны "terry" позволяет Киму знать, что игра является фактической игрой тот разработанный Терри. Для этого, чтобы работать, Ким, должно быть, уже сохранил сертификат Терри с открытым ключом в kim.keystore использование псевдонима "terry".

Заметьте что HighScorePermission потребности, которые будут подписаны "chris", человек, который фактически реализовывал то разрешение. Это гарантирует это ExampleGame предоставляется фактическое разрешение, реализованное "chris", и не кто-то еще. Как прежде, для этого, чтобы работать Ким, должно быть, уже сохранил сертификат Криса с открытым ключом в kim.keystore использование псевдонима "chris".

Запись HighScore

Заключительная запись в файле политики предоставляет полномочия HighScore class. Более определенно это предоставляет, что полномочия кодируют подписанный "chris", кто создал и подписал class. Требование, чтобы class был подписан "chris" гарантирует это когда ExampleGame призывает этот class обновлять высокий счет пользователя, ExampleGame знает наверняка, что это использует исходный class, реализованный "chris".

Чтобы обновить высокое значение счета пользователя для любых игр, которые призывают это, делают так, HighScore class требует трех полномочий:

1. Разрешение, чтобы читать "user.home" значение свойства.

HighScore class хранит высокие значения счета пользователя в a .highscore файл в корневом каталоге пользователя. Поэтому этот class нуждается в a java.util.PropertyPermission это позволяет этому читать "user.home" значение свойства, чтобы узнать точно, где корневой каталог пользователя находится:

permission java.util.PropertyPermission 
    "user.home", "read";

2. Разрешение, чтобы читать и записать в высокий файл счета непосредственно.

Это разрешение необходимо так HighScore getHighScore и setHighScore методы могут получить доступ к пользователю .highscore файл, чтобы добраться или установить, соответственно, ток высоко выигрывает за текущую игру.

Вот необходимое разрешение:

permission java.io.FilePermission
    "${user.home}${/}.highscore", "read,write";

Отметьте: нотация ${propName} определяет значение свойства. Таким образом, ${user.home} будет заменен значением "user.home" свойство. Нотация ${/} независимый от платформы способ определить разделитель файлов.

3. Весь HighScorePermissions (то есть, HighScorePermissions любого имени).

Это разрешение необходимо так, чтобы HighScore проверкам, чтобы гарантировать игру вызова предоставили a HighScorePermission то, имя которого является игровым именем, будет работать. Таким образом, HighScore class нужно также предоставить разрешение, так как проверка разрешения требует, чтобы у всего кода в настоящий момент стека было указанное разрешение.

Вот необходимое разрешение:

permission com.scoredev.scores.HighScorePermission
    "*", signedBy "chris";

Как прежде, HighScorePermission непосредственно потребности, которые будут подписаны "chris", человек, который фактически реализовывал разрешение.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Класс HighScorePermission
Следующая страница: Соединение Всего этого