public final class URLPermission extends Permission
网址
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
中的路径的方式指定 。 以下示例显示了三种不同的方式:
'*'和' - '只能在路径的最后一段中指定,并且必须是该段中唯一的字符。 构造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)由应用程序代码设置,而不管有效的安全策略是否允许。
Constructor and Description |
---|
URLPermission(String url)
使用给定的url字符串和无限制的方法创建一个URLPermission,并通过调用两个参数构造函数来请求头,如下所示:URLPermission(url,“*:*”)
|
URLPermission(String url, String actions)
从url字符串创建一个新的URLPermission,并允许给定的请求方法和用户可设置的请求头。
|
Modifier and Type | Method and Description |
---|---|
boolean |
equals(Object p)
如果this.getActions()。equals(p.getActions())和p的url等于这个url,则返回true。
|
String |
getActions()
返回标准化方法列表和请求头列表,格式如下:
|
int |
hashCode()
返回从动作字符串和url字符串的哈希码计算的哈希码。
|
boolean |
implies(Permission p)
检查此URLPermission是否意味着给定的权限。
|
checkGuard, getName, newPermissionCollection, toString
public URLPermission(String url, String actions)
url
- url字符串
actions
- 操作字符串
IllegalArgumentException
- 如果网址无效或动作包含空格。
public URLPermission(String url)
url
- url字符串
IllegalArgumentException
- 如果网址不会导致有效的URI
public String getActions()
"method-names : header-names"
其中method-names是由逗号分隔的方法列表,header-names是允许的标题列表,以逗号分隔。 返回的String中没有空格。 如果标题名为空,则冒号分隔符将不存在。
getActions
在
Permission
public boolean implies(Permission p)
路径匹配的一些示例如下所示:
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/- noimplies
在
Permission
p
- 允许检查。
public boolean equals(Object p)
equals
在
Permission
p
- 我们正在测试与此对象相等的对象。
Object.hashCode()
, HashMap
public int hashCode()
hashCode
在
Permission
Object.equals(java.lang.Object)
,
System.identityHashCode(java.lang.Object)