模块  java.base
软件包  java.net

Class URLPermission

  • 实现的所有接口
    SerializableGuard

    public final class URLPermissionextends Permission
    表示访问由给定URL定义的资源或资源集的权限,以及给定的一组用户可设置的请求方法和请求标头的权限。 权限的名称是url字符串。 actions字符串是请求方法和标头的串联。 方法和标题名称的范围不受此类的限制。

    网址

    url字符串具有以下预期结构。

      scheme : // authority [ / path ] 
    scheme通常是http或https,但不受此类的限制。 权限指定为:
      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是可选的。 创建URLPermission时,将忽略userinfo组件(如果存在),并且不会影响此类定义的任何其他方法。

    路径组件包括一系列路径段,由“/”字符分隔。 路径也可能是空的。 路径的指定方式与FilePermission的路径类似 以下示例显示了三种不同的方式:

    URL Examples Example url Description http://www.oracle.com/a/b/c.html A url which identifies a specific (single) resource http://www.oracle.com/a/b/* The '*' character refers to all resources in the same "directory" - in other words all resources with the same number of path components, and which only differ in the final path component, represented by the '*'. http://www.oracle.com/a/b/- The '-' character refers to all resources recursively below the preceding path (eg. http://www.oracle.com/a/b/c/d/e.html matches this example).

    '*'和' - '只能在路径的最后一段中指定,并且必须是该段中唯一的字符。 构造URLPermissions时,将忽略URL的任何查询或片段组件。

    作为一种特殊情况,形式的网址“scheme:*”被认为是指给定方案的任何网址。

    url字符串的方案权限组件在不考虑大小写的情况下进行处理。 这意味着equals(Object)hashCode()implies(Permission)区分相对于这些成分不敏感的。 如果权限包含文字IP地址,则对地址进行规范化以进行比较。 路径组件区分大小写。

    动作字符串

    URLPermission的actions字符串是方法列表请求标头列表的串联。 这些是允许的请求方法和许可的允许请求标头(分别)的列表。 这两个列表用冒号':'字符分隔,每个列表的元素用逗号分隔。 一些例子是:

    • “POST,GET,DELETE”
    • “GET:X-美孚请求,X-BAR-请求”
    • “POST,GET:头1,头2”

    第一个示例指定方法:POST,GET和DELETE,但没有请求标头。 第二个示例指定一个请求方法和两个标头。 第三个示例指定了两个请求方法和两个标头。

    如果请求标头列表为空,则不需要存在冒号分隔符。 操作字符串中不允许使用空格。 提供给URLPermission构造函数的操作字符串不区分大小写,并通过将方法名称转换为大写和标题名称到RFC2616中定义的格式进行规范化(小写,每个单词的首字母大写)。 两个列表都可以包含通配符'*'字符,分别表示所有请求方法或标头。

    注意。 根据使用环境,可能始终允许某些请求方法和标头,并且可能在任何时候都不允许其他请求方法和标头。 例如,HTTP协议处理程序可能会禁止某些标头(如Content-Length)由应用程序代码设置,无论有效的安全策略是否允许它。

    从以下版本开始:
    1.8
    另请参见:
    Serialized Form
    • 构造方法详细信息

      • URLPermission

        public URLPermission​(String url,                     String actions)
        从url字符串创建一个新的URLPermission,它允许给定的请求方法和用户可设置的请求标头。 权限的名称是它创建的url字符串。 内部仅使用url的方案,权限和路径组件。 忽略任何片段或查询组件。 权限操作字符串如上所述。
        参数
        url - url字符串
        actions - 操作字符串
        异常
        IllegalArgumentException - 如果url无效或者操作包含空格。
      • URLPermission

        public URLPermission​(String url)
        通过调用两个参数构造函数,使用给定的url字符串和不受限制的方法以及请求标头创建URLPermission,如下所示:URLPermission(url,“*:*”)
        参数
        url - 网址字符串
        异常
        IllegalArgumentException - 如果url未生成有效的URI
    • 方法详细信息

      • getActions

        public String getActions()
        返回规范化方法列表和请求标头列表,格式如下:
          "method-names : header-names" 

        其中method-names是以逗号和header-names分隔的方法列表,是以逗号分隔的允许标头列表。 返回的String中没有空格。 如果header-names为空,则可能不存在冒号分隔符。

        Specified by:
        getActions在类 Permission
        结果
        本许可的行为。
      • implies

        public boolean implies​(Permission p)
        检查此URLPermission是否暗示给定的权限。 具体来说,完成以下检查,就像按以下顺序进行:
        • 如果'p'不是URLPermission的实例,则返回false
        • 如果任何p的方法不在此方法列表中,并且此方法列表不等于“*”,则返回false。
        • 如果任何p的头不在此请求头列表中,并且此请求头列表不等于“*”,则返回false。
        • 如果这个url方案不等于p的url方案返回false
        • 如果此url的方案特定部分为'*',则返回true
        • 如果由p的url hostrange定义的主机集不是这个url hostrange的子集,则返回false。 例如,“* .foo.oracle.com”是“* .oracle.com”的子集。 “foo.bar.oracle.com”不是“* .foo.oracle.com”的子集
        • 如果p的url定义的portrange不是这个url定义的portrange的子集,则返回false。
        • 如果p的url指定的路径包含在这个url指定的路径集中,则返回true
        • 否则,返回false

        路径匹配方式的一些示例如下所示:

        Examples of Path Matching this's path p's path match /a/b /a/b yes /a/b/* /a/b/c yes /a/b/c/d no /a/b/c/- no /a/b/- /a/b/c/d yes /a/b/c/d/e yes /a/b/c/* yes
        Specified by:
        implies在类 Permission
        参数
        p - 要检查的权限。
        结果
        如果此对象隐含指定的权限,则返回true,否则返回false。
      • equals

        public boolean equals​(Object p)
        如果,this.getActions()。equals(p.getActions())和p的url等于这个url,则返回true。 否则返回false。
        Specified by:
        equals在类 Permission
        参数
        p - 我们正在测试与此对象相等的对象。
        结果
        如果两个Permission对象都是等效的,则为true。
        另请参见:
        Object.hashCode()HashMap