鴻蒙OS SocketPermission

2022-06-14 14:30 更新

SocketPermission

java.lang.Object

|---java.security.Permission

|---|---java.net.SocketPermission

public final class SocketPermission
extends Permission
implements Serializable

此類表示通過套接字訪問網絡。一個 SocketPermission 由一個主機規(guī)范和一組指定連接到該主機的方式的“操作”組成。主機被指定為

    host = (hostname | IPv4address | iPv6reference) [:portrange]
    portrange = portnumber | -portnumber | portnumber-[portnumber]

主機表示為 DNS 名稱、數字 IP 地址或“l(fā)ocalhost”(對于本地計算機)。 通配符“”可以包含在 DNS 名稱主機規(guī)范中一次。 如果包含它,它必須在最左邊的位置,如“.sun.com”。

IPv6reference 的格式應遵循 RFC 2732 中指定的格式:URL 中的 Literal IPv6 Addresses 格式:

    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-”形式的端口規(guī)范,其中N是端口號,表示編號為N及以上的所有端口,而形式為“-N”的規(guī)范表示編號為N及以下的所有端口。特殊端口值 0 指的是整個臨時端口范圍。這是系統(tǒng)可以用來分配動態(tài)端口的固定端口范圍。實際范圍可能取決于系統(tǒng)。

連接到主機的可能方式是

 accept
 connect
 listen
 resolve

“l(fā)isten”操作僅在與“l(fā)ocalhost”一起使用時才有意義,并且意味著能夠綁定到指定端口。 當存在任何其他動作時,暗示“resolve”動作。 操作“resolve”是指主機/IP 名稱服務查找。

在處理之前將操作字符串轉換為小寫。

以SocketPermissions的創(chuàng)建和含義為例,注意如果有以下權限:

   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 之間的任何端口上接受連接、連接或偵聽。

注意:授予代碼接受或連接到遠程主機的權限可能很危險,因為惡意代碼可以更容易地在可能無法訪問數據的各方之間傳輸和共享機密數據。

構造函數摘要

構造函數 描述
SocketPermission(String host, String action) 使用指定的操作創(chuàng)建一個新的 SocketPermission 對象。

方法總結

修飾符和類型 方法 描述
String getActions() 返回操作的規(guī)范字符串表示。
boolean implies(Permission p) 檢查此套接字權限對象是否“implies”指定的權限。
從類 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
從類 java.security.Permission 繼承的方法
checkGuard, getName, newPermissionCollection

構造函數詳細信息

SocketPermission

public SocketPermission(String host, String action)

使用指定的操作創(chuàng)建一個新的 SocketPermission 對象。 主機表示為 DNS 名稱或數字 IP 地址。 可選地,可以提供端口或端口范圍(用冒號與 DNS 名稱或 IP 地址分隔)。

要指定本地機器,請使用“l(fā)ocalhost”作為主機。 另請注意:空主機字符串 ("") 等效于 "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 計算機的主機名或 IP 地址,可選地包括一個冒號,后跟一個端口或端口范圍。
action action字符串

方法詳情

implies

public boolean implies(Permission p)

檢查此套接字權限對象是否“implies”指定的權限。

更具體地說,此方法首先確保以下所有條件為真(如果其中任何一個不為真,則返回假):

  • p 是一個 SocketPermission 的實例,
  • p 的動作是該對象動作的真子集,并且
  • p 的端口范圍包含在此端口范圍內。注意:當 p 僅包含操作“解析”時,將忽略端口范圍。

然后蘊含按順序檢查以下每一項,如果所述條件為真,則對每一項都返回真:

  • 如果此對象使用單個 IP 地址初始化,并且 p 的 IP 地址之一等于此對象的 IP 地址。
  • 如果此對象是通配符域(例如 .sun.com),并且 p 的規(guī)范名稱(前面沒有任何 的名稱)以該對象的規(guī)范主機名結尾。例如,.sun.com 暗示 .eng.sun.com。
  • 如果此對象未使用單個 IP 地址初始化,并且此對象的 IP 地址之一等于 p 的 IP 地址之一。
  • 如果此規(guī)范名稱等于 p 的規(guī)范名稱。

如果以上都不為true,則implies返回false。

指定者:

implies在類 Permission

參數:

參數名稱 參數描述
p 檢查的權限。

返回:

如果此對象隱含指定的權限,則為 true,否則為 false。

getActions

public String getActions()

返回操作的規(guī)范字符串表示。 始終按以下順序返回當前操作:連接、偵聽、接受、解決。

指定者:

權限類中的 getActions

返回:

actions的規(guī)范字符串表示。

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號