java.lang.Object java.security.Permission java.net.SocketPermission
public final class SocketPermission
此类表示通过套接字对网络的访问。SocketPermission 由主机规范和一组指定到该主机的连接方式的“动作”组成。主机被指定为
host = (hostname | IPv4address | iPv6reference) [:portrange] portrange = portnumber | -portnumber | portnumber-[portnumber]主机被表达为 DNS 名称、数字 IP 地址或“本地主机”(对于本地机器而言)。在 DNS 名称主机规范中,可能包括通配符 "*"。如果包括,则其必须位于最左边的位置,如 "*.sun.com"。
IPv6reference 的格式应该按照 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 字面值地址的完全未压缩形式也有效。
端口或端口范围是可选的。"N-" 形式的端口规范(其中 N 为端口号)表示端口号为 N 及以上的所有端口;而 "-N" 形式的端口规范则指示端口号为 N 及以下的所有端口。
连接到主机的可能方式为
accept connect listen resolve“侦听”动作仅在与“本地主机”一起使用时才有意义。任何其他动作出现时,都会暗含“解析”动作。“解析”动作指的是主机/ip 名称服务查找。
作为 SocketPermission 的创建和含义的示例,注意如果将以下权限:
p1 = new SocketPermission("puffin.eng.sun.com:7777", "connect,accept");授予某个代码,则其允许该代码连接到
puffin.eng.sun.com
上的 7777 端口,并接受该端口上的连接。
类似地,如果将以下权限:
p1 = new SocketPermission("puffin.eng.sun.com:7777", "connect,accept"); p2 = new SocketPermission("localhost:1024-", "accept,connect,listen");授予某个代码,则其允许该代码接受本地机器上 1024 和 65535 之间任何端口上的连接、连接到这些端口或者在这些端口上进行侦听。
注:授予代码接受远程主机上的连接或连接到远程主机的权限可能是危险的,因为恶意代码可以更加容易地在对保密数据不具访问权限的各方中传输和共享保密数据。
Permissions
,
SocketPermission
构造方法摘要 | |
---|---|
SocketPermission(String host, String action) 创建带指定动作的新 SocketPermission 对象。 |
方法摘要 | |
---|---|
boolean |
equals(Object obj) 检查两个 SocketPermission 对象的相等性。 |
String |
getActions() 返回动作的规范化字符串表示形式。 |
int |
hashCode() 返回此对象的哈希码值。 |
boolean |
implies(Permission p) 检查此套接字权限对象是否“暗含”指定的权限。 |
PermissionCollection |
newPermissionCollection() 用于存储 SocketPermission 对象的新 PermissionCollection 对象。 |
从类 java.security.Permission 继承的方法 |
---|
checkGuard, getName, toString |
从类 java.lang.Object 继承的方法 |
---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
构造方法详细信息 |
---|
public SocketPermission(String host, String action)
要支持本地机器,请使用“本地主机”作为 host。还要注意:空的 host String ("") 等效于“本地主机”。
action 参数包含指定主机(和端口)获准的以逗号分隔的动作列表。可能的动作为“连接”、“侦听”、“接受”、“解析”或这些动作的任意组合。当指定了其他三个动作时,会自动添加“解析”。
以下是 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 地址,可以选择是否包括后跟端口或端口范围的冒号。
actions
- 动作字符串。
方法详细信息 |
---|
public boolean implies(Permission p)
更明确地说,此方法首先确保以下情况全部为 true(如果其中任意一项不为 true,则返回 false):
implies
将按顺序检查以下每一项,如果所述条件为 true,则为每一项返回 true:
implies
返回 false。
Permission
中的
implies
p
- 所要检查的权限。
public boolean equals(Object obj)
Permission
中的
equals
obj
- 要与此对象进行相等性测试的对象。
Object.hashCode()
,
Hashtable
public int hashCode()
Permission
中的
hashCode
Object.equals(java.lang.Object)
,
Hashtable
public String getActions()
Permission
中的
getActions
public PermissionCollection newPermissionCollection()
SocketPermission 对象必须以允许将它们按任意顺序插入集合的方式来存储,但同时也允许以有效(并一致)的方式实现 PermissionCollection 的 implies
方法。
Permission
中的
newPermissionCollection