Module  java.base
软件包  java.net

Class URLPermission

  • All Implemented Interfaces:
    SerializableGuard


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

    网址

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

      scheme : // authority [ / path ] 
    方案通常是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是可选的。 如果存在userinfo组件,则在创建URLPermission时将被忽略,并且不影响此类定义的任何其他方法。

    路径组件包括由“/”字符分隔的路段段序列。 路径也可能是空的。 路径以类似于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被认为是给定方案的任何url。

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

    动作字符串

    URLPermission的操作字符串是方法列表请求标头列表的连接 这些是允许的请求方法和允许的请求头(分别)的列表。 两个列表用冒号“:”分隔,每个列表的元素都以逗号分隔。 一些例子是:

      "POST,GET,DELETE"
             "GET:X-Foo-Request,X-Bar-Request"
             "POST,GET:Header1,Header2" 
    第一个示例指定了以下方法: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 - 如果网址无效或动作包含空格。
      • URLPermission

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

      • getActions

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

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

        Specified by:
        getActionsPermission
        结果
        这个权限的动作。
      • 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/* /a/b/c/d no /a/b/- /a/b/c/d yes /a/b/- /a/b/c/d/e yes /a/b/- /a/b/c/* yes /a/b/* /a/b/c/- no
        Specified by:
        impliesPermission
        参数
        p - 允许检查。
        结果
        如果此对象隐含指定的权限,则为true,否则为false。
      • equals

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