Spec-Zone.ru › OpenJDK 21

Класс 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 ] [ ignored-query-or-fragment ]
 
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 может быть дополнена "*.", что означает, что имя будет соответствовать любому имени хоста, правые метки домена которого совпадают с этим именем. Например, "*.example.com" соответствует "foo.bar.example.com"

portrange используется для указания номера порта или ограниченного или неограниченного диапазона портов, к которым относится это разрешение. Если portrange отсутствует или некорректен, то предполагается значение по умолчанию для номера порта, если схема — http (значение по умолчанию 80) или https (значение по умолчанию 443). Для других схем значение по умолчанию не предполагается. Может быть указан символ подстановки, что означает все порты.

userinfo необязателен. Компонент userinfo, если он присутствует, игнорируется при создании URLPermission и не влияет на другие методы, определенные этим классом.

Компонент path состоит из последовательности сегментов пути, разделенных символами '/'. path также может быть пустым. Путь задаётся аналогично пути в FilePermission. Есть три различных способа, как показано в следующих примерах:

Примеры URL
Пример URL Описание
http://www.example.com/a/b/c.html URL, который идентифицирует конкретный (один) ресурс
http://www.example.com/a/b/* Символ '*' относится ко всем ресурсам в той же "папке" — другими словами, ко всем ресурсам с одинаковым количеством компонентов пути и которые отличаются только последним компонентом пути, представленным символом '*'.
http://www.example.com/a/b/- Символ '-' относится ко всем ресурсам, рекурсивно расположенным ниже предыдущего пути (например, http://www.example.com/a/b/c/d/e.html соответствует этому примеру).

Символы '*' и '-' могут быть указаны только в последнем сегменте пути и должны быть единственным символом в этом сегменте. Любые компоненты запроса или фрагмента URL игнорируются при построении URLPermission.

В качестве специального случая принимаются URL вида "scheme:*", что означает любой URL данной схемы.

Компоненты scheme и authority строки URL обрабатываются без учёта регистра. Это означает, что equals(Object), hashCode() и implies(Permission) не чувствительны к регистру относительно этих компонентов. Если authority содержит литеральный IP-адрес, то адрес нормализуется для сравнения. Компонент path чувствителен к регистру.

ignored-query-or-fragment относится к любому запросу или фрагменту, который появляется после компонента пути и игнорируется конструкторами этого класса. Он определяется следующим образом:

     ignored-query-or-fragment = [ ? query ] [ # fragment ]
 
где query и fragment определены в RFC2396. getName() поэтому возвращает только компоненты scheme, authority и path строки URL, с которой было создано разрешение.

Строка 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, устанавливаемые кодом приложения, независимо от того, разрешает ли действующая политика безопасности такое действие.

Since:
1.8
External Specifications
  • RFC 2296: HTTP Remote Variant Selection Algorithm -- RVSA/1.0
  • RFC 2732: Формат литеральных IPv6-адресов в URL
См. также:
  • Сериализованная форма

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

Конструктор Описание
URLPermission(String url)
Создаёт URLPermission с заданной строкой URL и неограниченными методами и заголовками запросов, вызывая двухаргументный конструктор следующим образом: URLPermission(url, "*:*")
URLPermission(String url, String actions)
Создаёт новый URLPermission из строки URL, разрешающий заданные методы запроса и устанавливаемые пользователем заголовки запроса.

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

Модификатор и тип Метод Описание
boolean equals(Object p)
Возвращает true, если this.getActions().equals(p.getActions()) и p's url равен 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
Возвращает:
действия данного 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.example.com" является подмножеством "*.example.com". "foo.bar.example.com" не является подмножеством "*.foo.example.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()) и p's url равен this's 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, 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/net/URLPermission.html

Spec-Zone.ru

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