模块 java.base
 java.net

类 SocketPermission

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 地址或“localhost”(对于本地计算机)。通配符“*”可以在 DNS 名称主机规范中包含一次。如果包含它,它必须在最左边的位置,如“*.example.com”。

IPv6reference 的格式应遵循 RFC 2732:URL 中文字 IPv6 地址的格式 中指定的格式:

  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及以下。特殊端口值0指的是整个短暂的端口范围。这是系统可用于从中分配动态端口的固定端口范围。实际范围可能取决于系统。

连接到主机的可能方法是

 accept
 connect
 listen
 resolve
 
“listen”动作仅在与“localhost”一起使用时才有意义,意味着绑定到指定端口的能力。当存在任何其他操作时,隐含“解决”操作。 “解析”操作指的是主机/IP 名称服务查找。

操作字符串在处理之前被转换为小写。

作为SocketPermissions的创建和含义的示例,注意如果有如下权限:

  p1 = new SocketPermission("foo.example.com:7777", "connect,accept");
 
被授予某些代码,它允许该代码连接到 foo.example.com 上的端口 7777,并接受该端口上的连接。

同样,如果有以下权限:

  p2 = new SocketPermission("localhost:1024-", "accept,connect,listen");
 
被授予某些代码,它允许该代码在本地主机上的 1024 和 65535 之间的任何端口上接受连接、连接或监听。

注意:授予代码接受或连接到远程主机的权限可能很危险,因为恶意代码可以更容易地在可能无法访问数据的各方之间传输和共享机密数据。

自从:
1.2
参见:
  • 构造方法详细信息

    • SocketPermission

      public SocketPermission(String  host, String  action)
      使用指定的操作创建一个新的 SocketPermission 对象。主机表示为 DNS 名称或数字 IP 地址。可选地,可以提供端口或端口范围(用冒号与 DNS 名称或 IP 地址分隔)。

      要指定本地机器,请使用“localhost”作为主持人.另请注意:空主持人String ("") 相当于"localhost"。

      动作参数包含为指定主机(和端口)授予的操作的逗号分隔列表。可能的操作是“连接”、“收听”、“接受”、“解决”或这些操作的任意组合。当指定其他三个中的任何一个时,将自动添加“resolve”。

      SocketPermission 实例化示例如下:

        nr = new SocketPermission("www.example.com", "connect");
        nr = new SocketPermission("www.example.com:80", "connect");
        nr = new SocketPermission("*.example.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 - 动作字符串。
      抛出:
      NullPointerException - 如果任何参数为空
      IllegalArgumentException - 如果 host 的格式无效,或者如果 action 字符串为空、格式错误或包含指定的可能操作以外的操作
  • 方法详情

    • implies

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

      更具体地说,此方法首先确保以下所有条件都为真(如果不满足则返回假):

      • p是 SocketPermission 的实例,
      • p的动作是该对象动作的真子集,并且
      • p的端口范围包含在此端口范围内。注意:当 p 仅包含操作“resolve”时,端口范围将被忽略。
      然后 implies 按顺序检查以下每一项,如果规定的条件为真,则每一项都返回真:
      • 如果此对象是使用单个 IP 地址和其中之一初始化的p的 IP 地址等于此对象的 IP 地址。
      • 如果此对象是通配符域(例如 *.example.com),并且p的规范名称(前面没有任何 * 的名称)以该对象的规范主机名结尾。例如,*.example.com 表示 *.foo.example.com。
      • 如果此对象未使用单个 IP 地址初始化,并且此对象的 IP 地址之一等于以下之一p的 IP 地址。
      • 如果这个规范名称等于p的规范名称。
      如果以上都不为真,implies 返回假。
      指定者:
      implies 在类 Permission
      参数:
      p - 检查的权限。
      返回:
      如果此对象隐含了指定的权限,则为 true,否则为 false。
    • equals

      public boolean equals(Object  obj)
      检查两个 SocketPermission 对象是否相等。
      指定者:
      equals 在类 Permission
      参数:
      obj - 要测试与此对象是否相等的对象。
      返回:
      如果对象是一个 SocketPermission,并且具有与此 SocketPermission 对象相同的主机名、端口范围和操作。但是,端口范围将在比较中被忽略,如果对象只包含动作,“解决”。
      参见:
    • hashCode

      public int hashCode()
      返回此对象的哈希码值。
      指定者:
      hashCode 在类 Permission
      返回:
      此对象的哈希码值。
      参见:
    • getActions

      public String  getActions()
      返回操作的规范字符串表示形式。始终按以下顺序返回当前操作:连接、收听、接受、解决。
      指定者:
      getActions 在类 Permission
      返回:
      动作的规范字符串表示。
    • newPermissionCollection

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

      SocketPermission 对象的存储方式必须允许它们以任何顺序插入到集合中,但同时也使 PermissionCollection implies 方法能够以高效(且一致)的方式实现。

      重写:
      newPermissionCollection 在类 Permission
      返回:
      适合存储 SocketPermissions 的新 PermissionCollection 对象。