Java-API简析_java.net.SocketPermission类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://blog.csdn.net/m0_69908381/article/details/131900302
出自【进步*于辰的博客】

因为我发现目前,我对Java-API的学习意识比较薄弱,需要慢慢习惯使用Java-API,乃至剖析源码来提升自己的源码阅读能力和编码素质。
大家如果需要Java-API文档,我上传了【https://download.csdn.net/download/m0_69908381/87691693】。

文章目录

  • 1、概述
  • 2、构造方法摘要
    • 2.1 String host, String action
  • 3、方法摘要
    • 3.1 boolean equals(Object obj)
    • 3.2 String getActions()
    • 3.3 int hashCode()
    • 3.4 boolean implies(Permission p)
    • 3.5 PermissionCollection newPermissionCollection()

1、概述

继承关系:

  • 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

2、构造方法摘要

2.1 String host, String action

创建带指定操作的新 SocketPermission 对象。
示例:

SocketPermission nr;
nr = new SocketPermission("www.catalog.com", "connect");// -------------A
nr = new SocketPermission("www.sun.com:80", "connect");// ----------=---B
nr = new SocketPermission("*.sun.com", "connect");// -------------------C
nr = new SocketPermission("*.edu", "resolve");// -----------------------D
nr = new SocketPermission("204.160.241.0", "connect");// ---------------E
nr = new SocketPermission("localhost:1024-65535", "listen");// ---------F
nr = new SocketPermission("204.160.241.0:1024-65535", "connect");// ----G

说明:

  1. A/B → 端口或端口范围是可选的;
  2. C/D → 如果 DNS 名称中包括通配符,则其必须位于最左边的位置;
  3. E → 主机被表达数字 IP 地址;
  4. F/G → “N-” 形式的端口规范表示端口号为 N 及以上 的所有端口;而 “-N” 形式的端口规范则指示端口号为 N 及以下 的所有端口。

3、方法摘要

3.1 boolean equals(Object obj)

检查两个 SocketPermission 对象的相等性。

3.2 String getActions()

返回操作的规范化字符串表示形式。

3.3 int hashCode()

返回此对象的哈希码值。

3.4 boolean implies(Permission p)

检查此套接字权限对象是否“暗含”指定的权限。

3.5 PermissionCollection newPermissionCollection()

用于存储 SocketPermission 对象的新 PermissionCollection 对象。


本文持续更新中。。。

你可能感兴趣的:(Java-API,Java-API简析,SocketPermision)