Spec-Zone .ru
спецификации, руководства, описания, API
|
Ниже полный файл политики для пользователя, желающего работать ExampleGame
.
Синтаксис файла политики не описывается здесь; если Вам интересно, см. страницу Синтаксиса Файла Реализации и Политики Политики Значения по умолчанию.
Вы не должны знать синтаксис; можно всегда использовать Средство осуществления политики, чтобы создать файлы политики, как показано на
Ниже демонстрационный файл политики, сопровождаемый описанием отдельных записей. Примите это
kim.keystore
.ExampleGame
был подписан игровым закрытым ключом создателя Терри, и соответствующий открытый ключ находится в keystore записи, искаженной "terry"
.HighScore
и HighScorePermissions
классы были подписаны закрытым ключом человека, который реализовывал их (Крис), и соответствующий открытый ключ находится в keystore записи, искаженной "chris"
.Вот файл политики: 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 является репозитарием ключей и сертификатов, и используется, чтобы искать открытые ключи подписывающих лиц, определенных в файле политики ("terry"
и "chris"
в этом примере).
keytool
утилита используется, чтобы создать и администрировать keystores.
Для этого урока предположите, что Ким хотел бы играть ExampleGame
. Если keystore Кима называют kim.keystore
, тогда файл политики Кима нуждается в следующей строке в самом начале:
keystore "kim.keystore";
Запись файла политики определяет, что одни или более полномочий для кода из определенного источника кода - или кодируют от определенного расположения (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
class. Более определенно это предоставляет, что полномочия кодируют подписанный "chris"
, кто создал и подписал class. Требование, чтобы class был подписан "chris"
гарантирует это когда ExampleGame
призывает этот class обновлять высокий счет пользователя, ExampleGame
знает наверняка, что это использует исходный class, реализованный "chris"
.
Чтобы обновить высокое значение счета пользователя для любых игр, которые призывают это, делают так, HighScore
class требует трех полномочий:
"user.home"
значение свойства. HighScore
class хранит высокие значения счета пользователя в a .highscore
файл в корневом каталоге пользователя. Поэтому этот class нуждается в a java.util.PropertyPermission
это позволяет этому читать "user.home"
значение свойства, чтобы узнать точно, где корневой каталог пользователя находится:
permission java.util.PropertyPermission "user.home", "read";
Это разрешение необходимо так HighScore
getHighScore
и setHighScore
методы могут получить доступ к пользователю .highscore
файл, чтобы добраться или установить, соответственно, ток высоко выигрывает за текущую игру.
Вот необходимое разрешение:
permission java.io.FilePermission "${user.home}${/}.highscore", "read,write";
Отметьте: нотация ${propName}
определяет значение свойства. Таким образом, ${user.home}
будет заменен значением "user.home"
свойство. Нотация ${/}
независимый от платформы способ определить разделитель файлов.
Это разрешение необходимо так, чтобы HighScore
проверкам, чтобы гарантировать игру вызова предоставили a HighScorePermission
то, имя которого является игровым именем, будет работать. Таким образом, HighScore
class нужно также предоставить разрешение, так как проверка разрешения требует, чтобы у всего кода в настоящий момент стека было указанное разрешение.
Вот необходимое разрешение:
permission com.scoredev.scores.HighScorePermission "*", signedBy "chris";
Как прежде, HighScorePermission
непосредственно потребности, которые будут подписаны "chris"
, человек, который фактически реализовывал разрешение.