Spec-Zone.ru › OpenJDK 21

Класс FilePermission

java.lang.Object
java.security.Permission
java.io.FilePermission
Все реализуемые интерфейсы:
Serializable, Guard
public final class FilePermission extends Permission implements Serializable
Этот класс представляет доступ к файлу или каталогу. FilePermission состоит из пути к файлу или каталогу и набора допустимых действий для этого пути.

Путь — это путь к файлу или каталогу, которому предоставлены указанные действия. Путь, заканчивающийся на «/*» (где «/» — символ разделителя файлов, File.separatorChar) указывает на все файлы и каталоги, содержащиеся в этом каталоге. Путь, заканчивающийся на «/-», указывает (рекурсивно) на все файлы и подкаталоги, содержащиеся в этом каталоге. Такой путь называется путём с подстановочными знаками. В противном случае это простой путь.

Путь, состоящий из специального маркера «<<ВСЕ ФАЙЛЫ>>», соответствует любому файлу.

Примечание: Путь, состоящий из одного «*», указывает на все файлы в текущем каталоге, а путь, состоящий из одного «-», указывает на все файлы в текущем каталоге и (рекурсивно) на все файлы и подкаталоги, содержащиеся в текущем каталоге.

Действия, которые должны быть предоставлены, передаются в конструктор в строке, содержащей список одного или нескольких ключевых слов, разделенных запятыми. Возможные ключевые слова: «read», «write», «execute», «delete» и «readlink». Их значение определяется следующим образом:

read
разрешение на чтение
write
разрешение на запись
execute
разрешение на выполнение. Позволяет вызвать Runtime.exec. Соответствует SecurityManager.checkExec.
delete
разрешение на удаление. Позволяет вызвать File.delete. Соответствует SecurityManager.checkDelete.
readlink
разрешение на чтение ссылки. Позволяет прочитать цель символической ссылки, вызвав метод readSymbolicLink .

Строка действий преобразуется в нижний регистр перед обработкой.

Будьте внимательны при предоставлении FilePermission. Подумайте о последствиях предоставления разрешения на чтение и, особенно, на запись для различных файлов и каталогов. Разрешение «<<ВСЕ ФАЙЛЫ>>» с действием «write» особенно опасно. Это предоставляет разрешение на запись во всю файловую систему. Это, в частности, позволяет заменить системные двоичные файлы, включая среду выполнения JVM.

Обратите внимание: код всегда может читать файл из того же каталога, что и он сам (или из подкаталога этого каталога); ему не требуется явное разрешение для этого.

C момента:
1.2
См. также:
  • Permission
  • Permissions
  • PermissionCollection

Краткое описание конструкторов

Конструктор Описание
FilePermission(String path, String actions)
Создаёт новый объект FilePermission с указанными действиями.

Краткое описание методов

Модификатор и тип Метод Описание
boolean equals(Object obj)
Проверяет равенство двух объектов FilePermission.
String getActions()
Возвращает «каноническое строковое представление» действий.
int hashCode()
Возвращает значение хэш-кода для этого объекта.
boolean implies(Permission p)
Проверяет, «подразумевает» ли этот объект FilePermission указанное разрешение.
PermissionCollection newPermissionCollection()
Возвращает новый объект PermissionCollection для хранения объектов FilePermission.

Методы, объявленные в классе java.security.Permission

checkGuard, getName, toString

Методы, объявленные в классе java.lang.Object

clone, finalize, getClass, notify, notifyAll, wait, wait, wait

Подробное описание конструкторов

FilePermission

public FilePermission(String path, String actions)
Создаёт новый объект FilePermission со заданными действиями. path — путь к файлу или каталогу, а actions содержит список действий, разделённых запятыми, которые разрешены для файла или каталога. Возможные действия: "read", "write", "execute", "delete" и "readlink".

Путь, заканчивающийся на "/*" (где "/" — символ разделителя пути, File.separatorChar) указывает на все файлы и каталоги, содержащиеся в этом каталоге. Путь, заканчивающийся на "/-", указывает (рекурсивно) на все файлы и подкаталоги, содержащиеся в этом каталоге. Специальный путь "<<ALL FILES>>" соответствует любому файлу.

Путь, состоящий только из "*", указывает на все файлы в текущем каталоге, а путь, состоящий только из "-", указывает на все файлы в текущем каталоге и (рекурсивно) все файлы и подкаталоги, содержащиеся в текущем каталоге.

Путь, содержащий пустую строку, представляет пустой путь.

Замечание по реализации:
В этой реализации системная переменная jdk.io.permissionsUseCanonicalPath определяет, как обрабатывается и хранится аргумент path.

Если значение системной переменной равно true, path канонизируется и хранится как объект String с именем cpath. Это означает, что относительный путь преобразуется в абсолютный, путь в формате Windows DOS 8.3 расширяется до длинного пути, символическая ссылка разрешается на её целевой объект и т.д.

Если значение системной переменной равно false, path преобразуется в объект Path с именем npath после normalization. Никакой канонизации не выполняется, что означает, что к файловой системе нет доступа. Если при преобразовании выбрасывается исключение InvalidPathException, данный FilePermission будет помечен как некорректный.

В любом случае, символ "*" или "-" в конце path удаляется до канонизации или нормализации. Он хранится в отдельном поле флага шаблона.

По умолчанию значение системной переменной jdk.io.permissionsUseCanonicalPath в этой реализации равно false.

Значение также может быть установлено с помощью свойства безопасности с тем же именем, но системная переменная будет переопределять значение свойства безопасности.

Параметры:
path - путь к файлу/каталогу.
actions - строка действий.
Исключения:
IllegalArgumentException - если actions пустая, неправильного формата или содержит действие, отличное от указанных возможных действий

Подробное описание методов

implies

public boolean implies(Permission p)
Проверяет, "подчиняется ли" этот объект FilePermission указанному разрешению.

Более конкретно, этот метод возвращает true, если:

  • p является экземпляром FilePermission,
  • действия p являются правильным подмножеством действий этого объекта, и
  • путь p подразумевается путем этого объекта. Например, "/tmp/*" подразумевает "/tmp/foo", поскольку "/tmp/*" охватывает все файлы в каталоге "/tmp", включая файл с именем "foo".

Точно, простой путь подразумевает другой простой путь, если и только если они равны. Простой путь никогда не подразумевает шаблонный путь. Шаблонный путь подразумевает другой шаблонный путь, если и только если все простые пути, подразумеваемые последним, подразумеваются первым. Шаблонный путь подразумевает простой путь, если и только если

  • если флаг шаблона "*", простой путь должен быть непосредственно внутри шаблонного пути.
  • если флаг шаблона "-", простой путь должен быть рекурсивно внутри шаблонного пути.

"<<ALL FILES>>" подразумевает каждый другой путь. Ни один путь, кроме "<<ALL FILES>>", не подразумевает "<<ALL FILES>>".

Определено в:
implies в классе Permission
Замечание по реализации:
Если jdk.io.permissionsUseCanonicalPath равен true, простой cpath находится внутри шаблонного cpath тогда и только тогда, когда после удаления имени базы (последнее имя в последовательности имён пути) из первого оставшаяся часть равна второму, простой cpath рекурсивно находится внутри шаблонного cpath тогда и только тогда, когда первый начинается со второго.

Если jdk.io.permissionsUseCanonicalPath равен false, простой npath находится внутри шаблонного npath тогда и только тогда, когда simple_npath.relativize(wildcard_npath) точно равно "..", простой npath рекурсивно находится внутри шаблонного npath тогда и только тогда, когда simple_npath.relativize(wildcard_npath) представляет собой серию из одного или нескольких "..". Это означает, что "/-" подразумевает "/foo", но не "foo".

Некорректный FilePermission не подразумевает ни один объект, кроме самого себя. Некорректный FilePermission не подразумевается ни одним объектом, кроме самого себя или FilePermission на "<<ALL FILES>>", чьи действия являются надмножеством этого некорректного FilePermission. Даже если два FilePermission созданы с одинаковым некорректным путем, один не подразумевает другой.

Параметры:
p - разрешение для проверки.
Возвращает:
true если указанное разрешение не null и подразумевается этим объектом, false в противном случае.

equals

public boolean equals(Object obj)
Проверяет два объекта FilePermission на равенство. Проверяет, что obj является FilePermission и имеет тот же путь и действия, что и этот объект.
Определено в:
equals в классе Permission
Замечание по реализации:
Более конкретно, два пути одинаковы, если и только если у них одинаковый флаг шаблона и их cpath (если jdk.io.permissionsUseCanonicalPath равен true или npath (если jdk.io.permissionsUseCanonicalPath равен false одинаковы. Или оба равны "<<ALL FILES>>".

Когда jdk.io.permissionsUseCanonicalPath равен false, некорректный FilePermission не равен ни одному объекту, кроме самого себя, даже если они созданы с использованием одного и того же некорректного пути.

Параметры:
obj - объект, с которым мы проверяем равенство с этим объектом.
Возвращает:
true если obj является FilePermission и имеет тот же путь и действия, что и этот объект FilePermission, false в противном случае.
См. также:
  • Object.hashCode()
  • HashMap

hashCode

public int hashCode()
Возвращает значение хэш-кода для этого объекта.
Определено в:
hashCode в классе Permission
Возвращает:
значение хэш-кода для этого объекта.
См. также:
  • Object.equals(java.lang.Object)
  • System.identityHashCode(java.lang.Object)

getActions

public String getActions()
Возвращает "каноническое строковое представление" действий. То есть, этот метод всегда возвращает присутствующие действия в следующем порядке: чтение, запись, выполнение, удаление, чтение символической ссылки. Например, если этот объект FilePermission разрешает действия записи и чтения, вызов getActions вернёт строку "read,write".
Определено в:
getActions в классе Permission
Возвращает:
каноническое строковое представление действий.

newPermissionCollection

public PermissionCollection newPermissionCollection()
Возвращает новый объект PermissionCollection для хранения объектов FilePermission.

Объекты FilePermission должны храниться таким образом, чтобы их можно было вставлять в коллекцию в любом порядке, но это также позволяет реализовать метод PermissionCollection implies эффективно (и последовательно).

Например, если у вас есть два FilePermission:

  1. "/tmp/-", "read"
  2. "/tmp/scratch/foo", "write"

и вы вызываете метод implies с FilePermission:

     "/tmp/scratch/foo", "read,write",
 
то функция implies должна учитывать как разрешения "/tmp/-", так и "/tmp/scratch/foo", поэтому эффективным разрешением является "read,write", и implies возвращает true. Семантика "implies" для FilePermission правильно обрабатывается объектом PermissionCollection, возвращаемым этим методом newPermissionCollection.
Переопределяет:
newPermissionCollection в классе Permission
Возвращает:
новый объект PermissionCollection, подходящий для хранения FilePermission.

© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/io/FilePermission.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API