java.net

接口
异常
java.lang.Object
  继承者 java.security.Permission
      继承者 java.net.SocketPermission
所有已实现的接口:
Serializable, Guard

public final class SocketPermission
     
extends Permission
implements Serializable

此类表示通过套接字对网络的访问。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
 

构造方法详细信息

SocketPermission

public SocketPermission(String host,
                        String action)
创建带指定动作的新 SocketPermission 对象。主机被表达为 DNS 名称或数字 IP 地址。可以选择支持端口还是端口范围(用冒号分隔 DNS 名称或 IP 地址)。

要支持本地机器,请使用“本地主机”作为 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 - 动作字符串。
方法详细信息

implies

public boolean implies(Permission p)
检查此套接字权限对象是否“暗含”指定的权限。

更明确地说,此方法首先确保以下情况全部为 true(如果其中任意一项不为 true,则返回 false):

  • p 是 SocketPermission 的一个实例,

  • p 的动作是此对象的动作的一个真子集,并且

  • p 的端口范围包括在此端口范围中。注:当 p 仅包含动作“解析”时,将忽略端口范围。

然后 implies 将按顺序检查以下每一项,如果所述条件为 true,则为每一项返回 true:

  • 如果此对象是使用单个 IP 地址初始化的,p 的其中一个 IP 地址等于此对象的 IP 地址。

  • 如果此对象为通配符域(如 *.sun.com),并且 p 的规范名称(不带任何前置 * 的名称)以此对象的规范主机名结尾。例如,*.sun.com 暗指 *.eng.sun.com。

  • 如果此对象不是使用单个 IP 地址初始化的,并且此对象的其中一个 IP 地址等于其中一个 p 的 IP 地址。

  • 如果此规范名称等于 p 的规范名称。

如果上述条件都不为 true,则 implies 返回 false。

指定者:
Permission 中的 implies
参数:
p - 所要检查的权限。
返回:
如果对象隐含指定的权限,则返回 true;否则返回 false。

equals

public boolean equals(Object obj)
检查两个 SocketPermission 对象的相等性。

指定者:
Permission 中的 equals
参数:
obj - 要与此对象进行相等性测试的对象。
返回:
如果 obj 为 SocketPermission,并且此 SocketPermission 对象具有相同的主机名、端口范围和动作,则返回 true。但是,如果 obj 仅包含动作“解析”,则比较中将忽略端口范围。
另请参见:
Object.hashCode(), Hashtable

hashCode

public int hashCode()
返回此对象的哈希码值。

指定者:
Permission 中的 hashCode
返回:
此对象的哈希码值。
另请参见:
Object.equals(java.lang.Object), Hashtable

getActions

public String getActions()
返回动作的规范化字符串表示形式。返回始终按以下顺序显示动作:连接、侦听、接受、解析。

指定者:
Permission 中的 getActions
返回:
动作的规范化字符串表示形式。

newPermissionCollection

public PermissionCollection newPermissionCollection()
用于存储 SocketPermission 对象的新 PermissionCollection 对象。

SocketPermission 对象必须以允许将它们按任意顺序插入集合的方式来存储,但同时也允许以有效(并一致)的方式实现 PermissionCollection 的 implies 方法。

覆盖:
Permission 中的 newPermissionCollection
返回:
适合存储 PropertyPermissions 的新 SocketPermissions 对象。