- java.lang.Object
-
- java.security.Permission
-
- java.net.URLPermission
-
- All Implemented Interfaces:
-
Serializable
,Guard
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时将被忽略,并且不影响此类定义的任何其他方法。
路径组件包括由“/”字符分隔的路段段序列。 路径也可能是空的。 路径以类似于
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).FilePermission
中的路径的方式指定。 以下示例显示了三种不同的方式:'*'和' - '只能在路径的最后一段中指定,并且必须是该段中唯一的字符。 构造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
-
-
构造方法摘要
构造方法 Constructor 描述 URLPermission(String url)
使用给定的url字符串和无限制的方法创建一个URLPermission,并通过调用两个参数构造函数来请求头,如下所示:URLPermission(url,“*:*”)URLPermission(String url, String actions)
从url字符串创建一个新的URLPermission,并允许给定的请求方法和用户可设置的请求头。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 boolean
equals(Object p)
如果this.getActions()。equals(p.getActions())和p的url等于这个url,则返回true。String
getActions()
返回标准化方法列表和请求头列表,格式如下:int
hashCode()
返回从动作字符串和url字符串的哈希码计算的哈希码。boolean
implies(Permission p)
检查此URLPermission是否意味着给定的权限。-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from class java.security.Permission
checkGuard, getName, newPermissionCollection, toString
-
-
-
-
构造方法详细信息
-
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:
-
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/* /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:
-
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
-
hashCode
public int hashCode()
返回从动作字符串和url字符串的哈希码计算的哈希码。- Specified by:
-
hashCode
在Permission
- 结果
- 该对象的哈希码值。
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
-