Module java.base
Package java.net

Class 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”。

IPv6引用的格式应遵循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”一起使用时有意义,表示绑定到指定端口的能力。“resolve”操作在其他操作中任何一个存在时都会被隐含。操作“resolve”指的是主机/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
外部规范
参见:
  • Constructor Details

    • SocketPermission

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

      要指定本地机器,请使用“localhost”作为host。还请注意:空的host字符串(“”)等同于“localhost”。

      actions参数包含针对指定主机(和端口)授予的操作的逗号分隔列表。可能的操作有“connect”、“listen”、“accept”、“resolve”,或这些操作的任意组合。当指定其他三个操作中的任何一个时,“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 - 如果任何参数为null
      IllegalArgumentException - 如果host的格式无效,或者action字符串为空、格式不正确或包含除指定可能操作之外的操作
  • Method Details

    • implies

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

      更具体地说,此方法首先确保以下所有内容为真(如果其中任何一个不为真,则返回false):

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

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

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

      public String getActions()
      返回操作的规范字符串表示形式。始终以以下顺序返回存在的操作: connect, listen, accept, resolve.
      指定者:
      getActions 在类 Permission
      返回:
      操作的规范字符串表示形式。
    • newPermissionCollection

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

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

      覆盖:
      newPermissionCollection 在类 Permission
      返回:
      适用于存储SocketPermissions的新PermissionCollection对象。