鴻蒙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

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

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

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

IPv6reference 的格式應(yīng)遵循 RFC 2732 中指定的格式:URL 中的 Literal IPv6 Addresses 格式:

    ipv6reference = "[" IPv6address "]"

例如,您可以構(gòu)造一個(gè) SocketPermission 實(shí)例,如下所示:

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

連接到主機(jī)的可能方式是

 accept
 connect
 listen
 resolve

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

在處理之前將操作字符串轉(zhuǎn)換為小寫。

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

   p1 = new SocketPermission("puffin.eng.sun.com:7777", "connect,accept"); 

授予某些代碼,它允許該代碼連接到 puffin.eng.sun.com 上的端口 7777,并接受該端口上的連接。

同樣,如果有以下權(quán)限:

   p2 = new SocketPermission("localhost:1024-", "accept,connect,listen"); 

被授予某些代碼,它允許該代碼在本地主機(jī)上的 1024 和 65535 之間的任何端口上接受連接、連接或偵聽(tīng)。

注意:授予代碼接受或連接到遠(yuǎn)程主機(jī)的權(quán)限可能很危險(xiǎn),因?yàn)閻阂獯a可以更容易地在可能無(wú)法訪問(wèn)數(shù)據(jù)的各方之間傳輸和共享機(jī)密數(shù)據(jù)。

構(gòu)造函數(shù)摘要

構(gòu)造函數(shù) 描述
SocketPermission(String host, String action) 使用指定的操作創(chuàng)建一個(gè)新的 SocketPermission 對(duì)象。

方法總結(jié)

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

構(gòu)造函數(shù)詳細(xì)信息

SocketPermission

public SocketPermission(String host, String action)

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

要指定本地機(jī)器,請(qǐng)使用“l(fā)ocalhost”作為主機(jī)。 另請(qǐng)注意:空主機(jī)字符串 ("") 等效于 "localhost"。

actions 參數(shù)包含為指定主機(jī)(和端口)授予的操作的逗號(hào)分隔列表。 可能的操作是“連接”、“收聽(tīng)”、“接受”、“解決”或這些的任意組合。 當(dāng)指定其他三個(gè)中的任何一個(gè)時(shí),會(huì)自動(dòng)添加“resolve”。

SocketPermission 實(shí)例化的示例如下:

    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");

參數(shù):

參數(shù)名稱 參數(shù)描述
host 計(jì)算機(jī)的主機(jī)名或 IP 地址,可選地包括一個(gè)冒號(hào),后跟一個(gè)端口或端口范圍。
action action字符串

方法詳情

implies

public boolean implies(Permission p)

檢查此套接字權(quán)限對(duì)象是否“implies”指定的權(quán)限。

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

  • p 是一個(gè) SocketPermission 的實(shí)例,
  • p 的動(dòng)作是該對(duì)象動(dòng)作的真子集,并且
  • p 的端口范圍包含在此端口范圍內(nèi)。注意:當(dāng) p 僅包含操作“解析”時(shí),將忽略端口范圍。

然后蘊(yùn)含按順序檢查以下每一項(xiàng),如果所述條件為真,則對(duì)每一項(xiàng)都返回真:

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

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

指定者:

implies在類 Permission

參數(shù):

參數(shù)名稱 參數(shù)描述
p 檢查的權(quán)限。

返回:

如果此對(duì)象隱含指定的權(quán)限,則為 true,否則為 false。

getActions

public String getActions()

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

指定者:

權(quán)限類中的 getActions

返回:

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

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)