Класс FilePermission
- Все реализуемые интерфейсы:
-
Serializable,Guard
public final class FilePermission extends Permission implements Serializable
Путь — это путь к файлу или каталогу, которому предоставлены указанные действия. Путь, заканчивающийся на «/*» (где «/» — символ разделителя файлов, 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
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
FilePermission |
Создаёт новый объект FilePermission с указанными действиями. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
equals |
Проверяет равенство двух объектов FilePermission. |
String |
getActions() |
Возвращает «каноническое строковое представление» действий. |
int |
hashCode() |
Возвращает значение хэш-кода для этого объекта. |
boolean |
implies |
Проверяет, «подразумевает» ли этот объект FilePermission указанное разрешение. |
PermissionCollection |
newPermissionCollection() |
Возвращает новый объект PermissionCollection для хранения объектов FilePermission. |
Методы, объявленные в классе java.security.Permission
checkGuard, getName, toString
Подробное описание конструкторов
FilePermission
public FilePermission(String path, String actions)
Путь, заканчивающийся на "/*" (где "/" — символ разделителя пути, 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)
Более конкретно, этот метод возвращает 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)
- Определено в:
-
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в противном случае. - См. также:
hashCode
public int hashCode()
- Определено в:
-
hashCodeв классеPermission - Возвращает:
- значение хэш-кода для этого объекта.
- См. также:
getActions
public String getActions()
getActions вернёт строку "read,write".- Определено в:
-
getActionsв классеPermission - Возвращает:
- каноническое строковое представление действий.
newPermissionCollection
public PermissionCollection newPermissionCollection()
Объекты FilePermission должны храниться таким образом, чтобы их можно было вставлять в коллекцию в любом порядке, но это также позволяет реализовать метод PermissionCollection implies эффективно (и последовательно).
Например, если у вас есть два FilePermission:
-
"/tmp/-", "read" -
"/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