openjdk.ruOpenJDK на русском

JEP 184: HTTP URL Permissions

Разрешения для HTTP URL

ОтветственныйMichael McMahon
ТипFeature
ОбластьSE
СтатусClosed / Delivered
Выпуск8
Компонентcore-libs / java.net
Обсуждениеnet dash dev at openjdk dot java dot net
ТрудоёмкостьS
ДлительностьS
Зависит отJEP 140: Limited doPrivileged
РецензентыAlan Bateman, Chris Hegarty, Jeffrey Nisewanger
ОдобренBrian Goetz
Создан2013/03/26 20:00
Обновлён2017/06/14 18:38
Задача8046174

Аннотация

Определить новый тип сетевого разрешения, который предоставляет доступ с указанием URL, а не низкоуровневых IP-адресов.

Мотивация

Сегодня сетевые разрешения можно задать только с помощью класса java.net.SocketPermission, у которого есть два серьёзных недостатка:

  1. Разрешения на сокеты управляют установкой низкоуровневых TCP-соединений. Поэтому они не позволяют отличить HTTP-соединение с каким-либо хостом, которое может быть разрешено, от других видов TCP-соединений с тем же хостом, которые могут быть запрещены.

  2. Разрешения на сокеты оперируют IP-адресами, а не именами хостов. Из-за этого невозможно различить виртуальные HTTP-серверы, размещённые на одном физическом сервере с одним и тем же IP-адресом. Хотя у двух таких серверов разные доменные имена, с помощью экземпляра SocketPermission нельзя разрешить доступ к одному серверу и запретить доступ к другому.

Описание

Эта возможность определит более высокоуровневый тип разрешения, специфичный для HTTP или, возможно, в более общем случае для произвольных схем URL. С помощью этого класса можно будет выражать разрешения через методы HTTP-запросов (GET, POST, PUT и т. д.) и компоненты URL: схему, authority и путь. Для проверки разрешений или сравнения объектов разрешений на равенство DNS-запросы не потребуются.

Обработчик протокола HTTP будет проверять наличие этих новых разрешений в стеке вызовов и с помощью ограниченной возможности doPrivileged() фактически преобразовывать разрешение для URL в SocketPermission для реального адресата.

Тестирование

Эта возможность добавляет один новый класс, который можно протестировать с помощью встроенного HTTP-сервера JDK. Модульные тесты для самого класса, т. е. для проверки публичных методов, таких как implies(), можно написать напрямую. Инженерная работа над этой возможностью будет включать оба вида тестов.

Зависимости

Эта возможность зависит от JEP 140: Limited doPrivileged.

Влияние

  • Безопасность: добавляется новое разрешение безопасности. Использование ограниченного doPrivileged() должно снизить риск проблем с безопасностью.