模块  java.base
软件包  java.net

Class SocketPermission

  • 实现的所有接口
    SerializableGuard

    public final class SocketPermission
    extends Permission
    implements Serializable
    此类表示通过套接字访问网络。 SocketPermission包含主机规范和一组“操作”,指定连接到该主机的方法。 主机指定为
      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也有效。

    端口或端口范围是可选的。 形式为“N-”的端口规范,其中N是端口号,表示编号为N及以上的所有端口,而形式“-N”的规范表示编号为N及以下的所有端口。 特殊端口值0指的是整个短暂的端口范围。 这是系统可用于分配动态端口的固定端口范围。 实际范围可能取决于系统。

    连接主机的可能方法是

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

    在处理之前,actions字符串将转换为小写。

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

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

    同样,如果以下权限:

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

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

    从以下版本开始:
    1.2
    另请参见:
    PermissionsSocketPermission
    • 构造方法详细信息

      • SocketPermission

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

        要指定本地计算机,请使用“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 - 计算机的主机名或 host ,可选地包括冒号后跟端口或端口范围。
        action - 操作字符串。
    • 方法详细信息

      • implies

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

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

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

        public boolean equals​(Object obj)
        检查两个SocketPermission对象是否相等。
        Specified by:
        equalsPermission
        参数
        obj - 要测试与此对象是否相等的对象。
        结果
        如果obj是SocketPermission,并且具有与此SocketPermission对象相同的主机名,端口范围和操作,则返回true。 但是,如果obj仅包含动作“resolve”,则在比较中将忽略端口范围。
        另请参见:
        Object.hashCode()HashMap
      • getActions

        public String getActions()
        返回操作的规范字符串表示形式。 始终按以下顺序返回当前操作:connect,listen,accept,resolve。
        Specified by:
        getActionsPermission
        结果
        行为的规范字符串表示。
      • newPermissionCollection

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

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

        重写:
        newPermissionCollection在类 Permission
        结果
        一个适合存储SocketPermissions的新PermissionCollection对象。