Skip to content

JEP 184: HTTP URL Permissions | HTTP URL 权限

摘要

定义一种新型网络权限,该权限通过 URL 而不是低级 IP 地址授予访问权限。

动机

目前,指定网络权限的唯一方式是通过 java.net.SocketPermission 类,这主要有两个重大缺陷:

  1. Socket 权限控制低级 TCP 连接的启动。因此,它们无法区分对某个主机的 HTTP 连接(可能是允许的)和对该主机的其他类型 TCP 连接(可能是不允许的)。

  2. Socket 权限基于 IP 地址而非主机名进行操作。这使得无法区分在相同物理服务器上的同一 IP 地址上托管的不同虚拟 HTTP 服务器。即使这两个服务器具有不同的域名,也无法使用 SocketPermission 实例来允许访问一个服务器而禁止访问另一个。

描述

此功能将定义一种针对 HTTP 或更一般地针对任意 URL 方案的高级权限类型。此类将能够根据 HTTP 请求方法(GETPOSTPUT 等)和 URL 方案、权限和路径组件来表达权限。为了进行权限检查或比较权限对象的等价性,将不需要进行 DNS 查找。

HTTP 协议处理程序将在调用堆栈中检查这些新权限,并使用 有限的 doPrivileged() 功能,有效地将 URL 权限转换为实际目的地的 SocketPermission

测试

此功能引入了一个新类,可以使用 JDK 内置的 HTTP 服务器进行测试。可以直接编写针对类本身的单元测试,即测试 implies() 等公共方法的单元测试。此功能的开发工作将包括这两种类型的测试。

依赖

此功能依赖于 JEP 140: Limited doPrivileged

影响

  • 安全性:引入新的安全权限。使用有限的 doPrivileged() 应该能够限制安全风险。