Module  java.base
软件包  java.net

Class SocketPermission

  • All Implemented Interfaces:
    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也是有效的。

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

    连接到主机的可能方式是

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

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

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

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

    同样,如果以下许可:

      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,则为true,并且具有与此SocketPermission对象相同的主机名,端口范围和操作。 但是,如果obj只包含动作“resolve”,则在比较中忽略端口范围。
        另请参见:
        Object.hashCode()HashMap
      • getActions

        public String getActions​()
        返回动作的规范字符串表示形式。 始终按以下顺序返回当前操作:连接,侦听,接受,解决。
        Specified by:
        getActionsPermission
        结果
        规范字符串表示的动作。
      • newPermissionCollection

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

        SocketPermission对象必须以允许以任何顺序插入到集合中的方式进行存储,但这也允许以有效(一致)的方式实现PermissionCollection implies方法。

        重写:
        newPermissionCollectionPermission
        结果
        一个适用于存储SocketPermissions的新PermissionCollection对象。