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, у которого есть два серьёзных недостатка:
-
Разрешения на сокеты управляют установкой низкоуровневых TCP-соединений. Поэтому они не позволяют отличить HTTP-соединение с каким-либо хостом, которое может быть разрешено, от других видов TCP-соединений с тем же хостом, которые могут быть запрещены.
-
Разрешения на сокеты оперируют 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()должно снизить риск проблем с безопасностью.