public final class SocketPermission extends Permission implements Serializable
host = (hostname | IPv4address | iPv6reference) [:portrange]
portrange = portnumber | -portnumber | portnumber-[portnumber]
主机表示为DNS名称,数字IP地址或“localhost”(用于本地机器)。
通配符“*”可以包含在DNS名称主机规范中。
如果包含在内,它必须位于最左侧的位置,如“* .sun.com”中所示。
IPv6引用的格式应遵循RFC 2732: Format for Literal IPv6 Addresses in URLs中规定的格式 :
ipv6reference = "[" IPv6address "]"
例如,您可以构造一个SocketPermission实例,如下所示:
String hostAddress = inetaddress.getHostAddress();
if (inetaddress instanceof Inet6Address) {
sp = new SocketPermission("[" + hostAddress + "]:" + port, action);
} else {
sp = new SocketPermission(hostAddress + ":" + port, action);
}
要么
String host = url.getHost();
sp = new SocketPermission(host + ":" + port, action);
IPv6文字地址的full uncompressed form也是有效的。
端口或portrange是可选的。 “N”形式的端口规范,其中N是端口号,表示所有编号为N及以上的端口,而“-N”形式的规格表示所有编号为N及更小的端口。 特殊端口值0
是指整个临时端口范围。 这是系统可用于分配动态端口的固定端口范围。 实际范围可能取决于系统。
连接到主机的可能方式是
accept
connect
listen
resolve
“listen”操作仅在与“localhost”一起使用时有意义,意味着绑定到指定端口的能力。
当存在任何其他操作时,暗示“解决”行为。
操作“解决”是指主机/ IP名称服务查找。
操作字符串在处理之前转换为小写。
作为SocketPermissions的创建和意义的一个例子,请注意,如果以下权限:
p1 = new SocketPermission("puffin.eng.sun.com:7777", "connect,accept");
授予某个代码,它允许该代码连接到端口7777上puffin.eng.sun.com
,并接受该端口上的连接。
同样,如果以下许可:
p2 = new SocketPermission("localhost:1024-", "accept,connect,listen");
被授予某些代码,它允许该代码在本地主机上接受1024到65535之间的任何端口上的连接,连接或监听。
注意:授予接受或连接到远程主机的代码权限可能是危险的,因为恶意代码可以更容易地在可能无法访问数据的各方之间传输和共享机密数据。
Permissions
, SocketPermission
Constructor and Description |
---|
SocketPermission(String host, String action)
使用指定的操作创建一个新的SocketPermission对象。
|
Modifier and Type | Method and Description |
---|---|
boolean |
equals(Object obj)
检查两个SocketPermission对象是否相等。
|
String |
getActions()
返回动作的规范字符串表示形式。
|
int |
hashCode()
返回此对象的哈希码值。
|
boolean |
implies(Permission p)
检查此套接字许可对象是否“暗示”指定的权限。
|
PermissionCollection |
newPermissionCollection()
返回一个新的PermissionCollection对象,用于存储SocketPermission对象。
|
checkGuard, getName, toString
public SocketPermission(String host, String action)
要指定本地机器,请使用“localhost”作为主机 。 另请注意:空主机 String(“”)等同于“localhost”。
actions参数包含为指定主机(和端口)授予的操作的逗号分隔列表。 可能的行为是“连接”,“听”,“接受”,“解决”或者这些的任何组合。 当指定其他三个中的任何一个时,将自动添加“resolve”。
SocketPermission实例化示例如下:
nr = new SocketPermission("www.catalog.com", "connect");
nr = new SocketPermission("www.sun.com:80", "connect");
nr = new SocketPermission("*.sun.com", "connect");
nr = new SocketPermission("*.edu", "resolve");
nr = new SocketPermission("204.160.241.0", "connect");
nr = new SocketPermission("localhost:1024-65535", "listen");
nr = new SocketPermission("204.160.241.0:1024-65535", "connect");
host
- 计算机的主机名或IP地址,可选地包括冒号后跟端口或端口范围。
action
- 动作字符串。
public boolean implies(Permission p)
更具体地说,该方法首先确保以下所有内容都是真实的(如果它们中没有一个则返回false):
implies
检查以下各项,如果所述条件为真,则每个返回true:
implies
返回false。
implies
在
Permission
p
- 允许检查。
public boolean equals(Object obj)
equals
在
Permission
obj
- 测试与此对象相等的对象。
Object.hashCode()
, HashMap
public int hashCode()
hashCode
在
Permission
Object.equals(java.lang.Object)
,
System.identityHashCode(java.lang.Object)
public String getActions()
getActions
在
Permission
public PermissionCollection newPermissionCollection()
SocketPermission对象必须以允许以任何顺序插入到集合中的方式进行存储,但这也允许以有效(一致的)方式实现PermissionCollection implies
方法。
newPermissionCollection
在
Permission