Класс 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.
Обратите внимание: код всегда может читать файл из того же каталога, в котором он находится (или из подкаталога этого каталога); для этого ему не требуется явное разрешение.
- С тех пор как:
- 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:
-
"/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, 2020, 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/11/docs/api/java.base/java/io/FilePermission.html