Spec-Zone.ru › OpenJDK 17

Класс 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 .

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

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

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

С:
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 имеет null, пустое, некорректное или содержит действие, отличное от указанных возможных действий

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

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()
Возвращает «каноническое строковое представление» действий. То есть этот метод всегда возвращает присутствующие действия в следующем порядке: read, write, execute, delete, readlink. Например, если этот объект FilePermission разрешает действия write и read, вызов 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, подходящий для хранения FilePermissions.

© 1993, 2021, 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/17/docs/api/java.base/java/io/FilePermission.html

Spec-Zone.ru

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