模块 java.base
 java.net

类 URLPermission

所有已实现的接口:
Serializable , Guard

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

网址

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

   scheme : // authority [ / path ] [ ignored-query-or-fragment ]
 
方案通常是 http 或 https,但不受此类限制。授权指定为:
   authority = [ userinfo @ ] hostrange [ : portrange ]
   portrange = portnumber | -portnumber | portnumber-[portnumber] | *
   hostrange = ([*.] dnsname) | IPv4address | IPv6address
 
域名是一个标准的 DNS 主机名或域名,即一个或多个由“.”分隔的标签。IPv4地址是一个标准的文字 IPv4 地址,并且IPv6地址 RFC 2732 中所定义。但是,文字 IPv6 地址必须包含在“[]”字符中。这域名规范前面可以加上“*”。这意味着该名称将匹配最右侧域标签与该名称相同的任何主机名。例如,“*.example.com”匹配“foo.bar.example.com”

波特兰用于指定端口号,或此权限适用的有界或无界端口范围。如果 portrange 不存在或无效,则如果方案为 http(默认 80)或 https(默认 443),则假定默认端口号。其他方案不假定默认值。可以指定通配符,表示所有端口。

用户信息是可选的。用户信息组件(如果存在)在创建 URLPermission 时将被忽略,并且对此类定义的任何其他方法都没有影响。

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

网址示例
示例网址 Description
http://www.example.com/a/b/c.html 标识特定(单个)资源的 url
http://www.example.com/a/b/* “*”字符指的是同一“目录”中的所有资源 - 换句话说,所有资源都具有相同数量的路径组件,并且仅在最终路径组件上有所不同,由“*”表示。
http://www.example.com/a/b/- '-' 字符指的是递归在前面路径下的所有资源(例如 http://www.example.com/a/b/c/d/e.html 匹配这个示例)。

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

作为一种特殊情况,“scheme:*”形式的 url 被接受为表示给定方案的任何 url。

方案授权处理 url 字符串的组件时不考虑大小写。这意味着 equals(Object) hashCode() implies(Permission) 对这些组件不区分大小写。如果授权包含文字 IP 地址,然后将地址标准化以进行比较。路径部分区分大小写。

被忽略的查询或片段指的是出现在路径组件之后的任何查询或片段,并且被此类的构造方法忽略。它被定义为:

   ignored-query-or-fragment = [ ? query ] [ # fragment ]
 
哪里询问分段RFC2396 中所定义。 getName() 因此只返回方案, 授权path创建权限的 url 字符串的组成部分。

动作字符串

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

  • "POST,GET,DELETE"
  • “GET:X-Foo-请求,X-Bar-请求”
  • “发布,获取:标题 1,标题 2”

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

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

笔记。根据使用的上下文,某些请求方法和标头可能始终允许,而其他请求方法和标头可能始终不允许。例如,HTTP 协议处理程序可能不允许应用程序代码设置某些标头(例如 Content-Length),无论生效的安全策略是否允许。

自从:
1.8
参见:
  • 构造方法总结

    构造方法
    构造方法
    描述
    通过如下调用两个参数构造方法,使用给定的 url 字符串和不受限制的方法和请求标头创建 URLPermission:URLPermission(url, "*:*")
    URLPermission(String url, String actions)
    从 url 字符串创建一个新的 URLPermission,它允许给定的请求方法和用户可设置的请求标头。
  • 方法总结

    修饰符和类型
    方法
    描述
    boolean
    如果 this.getActions().equals(p.getActions()) 和 p 的 url 等于 this 的 url,则返回 true。
    返回规范化的方法列表和请求头列表,形式为:
    int
    返回根据操作字符串和 url 字符串的哈希码计算得出的哈希码。
    boolean
    检查此 URLPermission 是否暗示给定的权限。

    在类 java.security.Permission 中声明的方法

    checkGuard, getName, newPermissionCollection, toString

    在类 java.lang.Object 中声明的方法

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • 构造方法详细信息

    • URLPermission

      public URLPermission(String  url, String  actions)
      从 url 字符串创建一个新的 URLPermission,它允许给定的请求方法和用户可设置的请求标头。权限的名称是创建时使用的 url 字符串。内部仅使用 url 的 scheme、authority 和 path 组件。忽略任何片段或查询组件。权限操作字符串如上所述。
      参数:
      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 是由逗号分隔的允许标头列表。返回的字符串中没有空格。如果 header-names 为空,则冒号分隔符可能不存在。

      指定者:
      getActions 在类 Permission
      返回:
      这个 Permission 的动作。
    • implies

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

      下面显示了一些如何匹配路径的示例:

      路径匹配示例
      这是路径 p的路径 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
      指定者:
      implies 在类 Permission
      参数:
      p - 检查的权限。
      返回:
      true 如果此对象隐含了指定的权限,false 如果不是。
    • equals

      public boolean equals(Object  p)
      如果 this.getActions().equals(p.getActions()) 和 p 的 url 等于 this 的 url,则返回 true。否则返回假。
      指定者:
      equals 在类 Permission
      参数:
      p - 我们正在测试与此对象是否相等的对象。
      返回:
      true 如果两个 Permission 对象是等价的。
      参见:
    • hashCode

      public int hashCode()
      返回根据操作字符串和 url 字符串的哈希码计算得出的哈希码。
      指定者:
      hashCode 在类 Permission
      返回:
      此对象的哈希码值。
      参见: