Класс URLPermission
- java.lang.Object
-
- java.security.Permission
-
- java.net.URLPermission
- Все реализованные интерфейсы:
-
Serializable,Guard
public final class URLPermission extends Permission
Представляет разрешение на доступ к ресурсу или набору ресурсов, определённых заданным URL, и для заданного набора пользовательских методов запроса и заголовков запроса. Имя разрешения — строка URL. Строка actions — конкатенация методов запроса и заголовков запроса. Диапазон имён методов и заголовков не ограничен этим классом.
URL
Строка URL имеет следующую ожидаемую структуру.
scheme : // authority [ / path ]scheme обычно будет http или https, но не ограничен этим классом. authority задаётся следующим образом:
authority = [ userinfo @ ] hostrange [ : portrange ]
portrange = portnumber | -portnumber | portnumber-[portnumber] | *
hostrange = ([*.] dnsname) | IPv4address | IPv6address dnsname — стандартное имя хоста или домена DNS, т.е. одна или несколько меткок, разделённых точкой. IPv4address — стандартный литеральный IPv4 адрес, а IPv6address определён в RFC 2732. Однако, литеральные IPv6 адреса должны быть заключены в символы '[]'. Спецификация dnsname может быть предшествована "*.", что означает, что имя будет соответствовать любому имени хоста, правые метки домена которого совпадают с этим именем. Например, "*.oracle.com" соответствует "foo.bar.oracle.com" portrange используется для указания номера порта или ограниченного или неограниченного диапазона портов, к которым относится это разрешение. Если portrange отсутствует или некорректен, предполагается стандартный номер порта, если схема — http (по умолчанию 80) или https (по умолчанию 443). Для других схем не предполагается никакого значения по умолчанию. Может быть указан символ подстановки, означающий все порты.
userinfo необязателен. Компонент userinfo, если он присутствует, игнорируется при создании URLPermission и не оказывает никакого влияния на другие методы, определённые этим классом.
Компонент path состоит из последовательности сегментов пути, разделённых символами '/'. path также может быть пустым. Путь задаётся аналогично пути в FilePermission. Существует три различных способа, как показано в следующих примерах:
| Пример URL | Описание |
|---|---|
| http://www.oracle.com/a/b/c.html | URL, который идентифицирует конкретный (единичный) ресурс |
| http://www.oracle.com/a/b/* | Символ '*' относится ко всем ресурсам в одном "каталоге" — другими словами, ко всем ресурсам с одинаковым количеством компонентов пути и которые различаются только конечным компонентом пути, представленным символом '*'. |
| http://www.oracle.com/a/b/- | Символ '-' относится ко всем ресурсам, находящимся иерархически ниже предыдущего пути (например, http://www.oracle.com/a/b/c/d/e.html соответствует этому примеру). |
Символы '*' и '-' могут быть указаны только в последнем сегменте пути и должны быть единственными символами в этом сегменте. Любые компоненты запроса или фрагмента URL игнорируются при построении URLPermissions.
В качестве специального случая URL вида "scheme:*" принимаются для обозначения любого URL с данной схемой.
Компоненты scheme и authority строки URL обрабатываются без учёта регистра. Это означает equals(Object), hashCode() и implies(Permission) нечувствительны к регистру в отношении этих компонентов. Если authority содержит литеральный IP-адрес, то адрес нормализуется для сравнения. Компонент пути чувствителен к регистру.
Строка actions
Строка actions URLPermission представляет собой конкатенацию списка методов и списка заголовков запроса. Это списки разрешённых методов запроса и разрешённых заголовков запроса для разрешения (соответственно). Два списка разделяются двоеточием ':' и элементы каждого списка разделяются запятыми. Вот несколько примеров:
- "POST,GET,DELETE"
- "GET:X-Foo-Request,X-Bar-Request"
- "POST,GET:Header1,Header2"
Первый пример указывает методы: POST, GET и DELETE, но без заголовков запроса. Второй пример указывает один метод запроса и два заголовка. Третий пример указывает два метода запроса и два заголовка.
Разделитель двоеточие не требуется, если список заголовков запроса пуст. В строке actions не допускаются пробелы. Строки actions, передаваемые конструкторам URLPermission, нечувствительны к регистру и нормализуются путём преобразования имён методов в верхний регистр, а имён заголовков — в форму, определённую в RFC2616 (строчные буквы с заглавной первой буквой каждого слова).
Любой из списков может содержать символ подстановки '*' , который обозначает все методы запроса или заголовки запроса соответственно.
Примечание. В зависимости от контекста использования некоторые методы запроса и заголовки запроса могут быть разрешены всегда, а другие — никогда. Например, обработчик протокола HTTP может запретить некоторые заголовки, такие как Content-Length, чтобы их не устанавливал код приложения, независимо от того, разрешает ли действующая политика безопасности их.
- С тех пор:
- 1.8
- См. также:
- Формат сериализации
Конструкторы
| Конструктор | Описание |
|---|---|
URLPermission(String url) | Создаёт URLPermission со строкой URL и неограниченными методами и заголовками запроса, вызывая двухаргументный конструктор следующим образом: URLPermission(url, "*:*") |
URLPermission(String url,
String actions) | Создаёт новый URLPermission из строки URL, разрешающий указанные методы запроса и пользовательские заголовки запроса. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean | equals(Object p) | Возвращает true, если this.getActions().equals(p.getActions()) и url p равен url this. |
String | getActions() | Возвращает нормализованный список методов и заголовков запроса в формате: |
int | hashCode() | Возвращает хэш-код, вычисленный на основе хэш-кода строки actions и строки url. |
boolean | implies(Permission p) | Проверяет, подразумевает ли эта URLPermission данное разрешение. |
Методы, объявленные в классе java.security.Permission
checkGuard, getName, newPermissionCollection, toString Методы, объявленные в классе java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait Конструкторы
URLPermission
public URLPermission(String url,
String actions) Создаёт новый URLPermission из строки url и разрешённых методов запроса и настраиваемых пользователем заголовков запроса. Название разрешения — это строка url, с которой оно было создано. Внутренне используются только схема, авторитет и путь url. Любые фрагменты или компоненты запроса игнорируются. Строка действия разрешения указана выше.
- Параметры:
-
url- строка url -
actions- строка действий - Исключения:
-
IllegalArgumentException- если url недействителен или если actions содержит пробелы.
URLPermission
public URLPermission(String url)
Создаёт URLPermission с заданной строкой url и неограниченными методами и заголовками запроса, вызывая конструктор с двумя аргументами следующим образом: URLPermission(url, "*:*")
- Параметры:
-
url- строка url - Исключения:
-
IllegalArgumentException- если url не приводит к валидномуURI
Методы
getActions
public String getActions()
Возвращает нормализованный список методов и список заголовков запроса в формате:
"method-names : header-names"
где method-names — список методов, разделённых запятыми, а header-names — список разрешённых заголовков, разделённых запятыми. В возвращаемой строке нет пробелов. Если header-names пусто, то разделитель двоеточие может отсутствовать.
- Определено в:
-
getActionsв классеPermission - Возвращает:
- действия этого разрешения.
implies
public boolean implies(Permission p)
Проверяет, подразумевает ли это URLPermission данное разрешение. Конкретно, выполняются следующие проверки, как будто в следующем порядке:
- если 'p' не является экземпляром URLPermission, вернуть false
- если любой из методов p отсутствует в списке методов этого, и если список методов этого не равен "*", то вернуть false.
- если любой из заголовков p отсутствует в списке заголовков запроса этого, и если список заголовков запроса этого не равен "*", то вернуть false.
- если схема url этого не равна схеме url p, вернуть false
- если специфическая часть схемы url этого равна '*', вернуть true
- если множество хостов, определённых диапазоном хостов url p, не является подмножеством диапазона хостов url этого, то вернуть false. Например, "*.foo.oracle.com" является подмножеством "*.oracle.com". "foo.bar.oracle.com" не является подмножеством "*.foo.oracle.com"
- если диапазон портов, определённый url p, не является подмножеством диапазона портов, определённого url этого, то вернуть false.
- если путь или пути, указанные в url p, содержатся в наборе путей, указанных в url этого, то вернуть true
- в противном случае вернуть false
Некоторые примеры того, как соответствуют пути, показаны ниже:
| Путь этого | Путь p | Соответствие |
|---|---|---|
| /a/b | /a/b | да |
| /a/b/* | /a/b/c | да |
| /a/b/c/d | нет | |
| /a/b/c/- | нет | |
| /a/b/- | /a/b/c/d | да |
| /a/b/c/d/e | да | |
| /a/b/c/* | да |
- Определено в:
-
impliesв классеPermission - Параметры:
-
p- разрешение для проверки. - Возвращает:
- true, если указанное разрешение подразумевается этим объектом, false — если нет.
equals
public boolean equals(Object p)
Возвращает true, если this.getActions().equals(p.getActions()) и url p равен url этого. В противном случае возвращает false.
- Определено в:
-
equalsв классеPermission - Параметры:
-
p- объект, с которым мы проверяем равенство этого объекта. - Возвращает:
- true, если оба объекта Permission эквивалентны.
- См. также:
-
Object.hashCode(),HashMap
hashCode
public int hashCode()
Возвращает хэш-код, вычисленный из хэш-кода строки actions и строки url.
- Определено в:
-
hashCodeв классеPermission - Возвращает:
- значение хэш-кода для этого объекта.
- См. также:
-
Object.equals(java.lang.Object),System.identityHashCode(java.lang.Object)
© 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/net/URLPermission.html