モジュール java.base
パッケージ java.net

クラスSocketPermission

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アドレス、localhost (ローカル・マシンの場合)のどれかで表されます。 DNS名によるホストの指定では、ワイルドカード「*」を1つだけ使うことができます。 含まれる場合、"*.example.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);
    }
 
or
    String host = url.getHost();
    sp = new SocketPermission(host + ":" + port, action);
 

IPv6リテラル・アドレスの非圧縮形式も有効です。

ポートまたはポート範囲は省略可能です。 ポートを「N-」(Nはポート番号)という形で指定した場合は、ポート番号Nとそれより上のすべてのポート番号を表します。また、「-N」という形で指定した場合は、ポート番号Nとそれより下のすべてのポート番号を表します。 特殊なポート値0は、一時的なポートの範囲全体を指します。 これは固定のポート範囲です。システムではこの範囲から動的ポートを割り当てることができます。 実際の範囲はシステムによって異なります。

ホストへの接続方法としては、次のどれかを指定できます。

 accept
 connect
 listen
 resolve
 
「listen」アクションは、「localhost」とともに使用した場合だけ意味を持ち、特定のポートにバインドする機能を意味します。 「resolve」アクションは、ほかのアクションのいずれかが存在する場合には暗黙的に指定されます。 アクション「resolve」は、ホスト/IPのネーム・サービス検索を指します。

アクション文字列は、処理の前に小文字に変換されます。

SocketPermissionsの作成およびその意味を例に示します。

   p1 = new SocketPermission("foo.example.com:7777", "connect,accept");
 
は、コードによっては、foo.example.com上のポート7777に接続し、そのポート上の接続を受け入れることができます。

同様に、

   p2 = new SocketPermission("localhost:1024-", "accept,connect,listen");
 
あるコードに対して上のアクセス権が認められた場合、そのコードは、ローカル・ホスト上の1024から65535のポートに対して、接続の受け入れ、接続、待機を行うことを許可されます。

ノート: リモート・ホストへの接続要求を受け付けるためのアクセス権やリモート・ホストへ接続するためのアクセス権をコードに与えると、悪意のあるコードが、そのようなアクセス権がなければそのデータにアクセスできないホスト間で、機密データをより簡単に転送および共有できるようになるため危険です。

導入されたバージョン:
1.2
関連項目:
Permissions, SocketPermission
  • コンストラクタのサマリー

    コンストラクタ
    コンストラクタ
    説明
    SocketPermission​(String host, String action)
    指定されたアクションを持つ新しいSocketPermissionオブジェクトを生成します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    boolean
    equals​(Object obj)
    2つのSocketPermissionオブジェクトが等しいかどうかを判定します。
    アクションの正規の文字列表現を返します。
    int
    このオブジェクトのハッシュ・コード値を返します。
    boolean
    指定されたアクセス権が、このソケット・アクセス権オブジェクトに含まれているかどうかを判定します。
    SocketPermissionオブジェクトを格納するための、新しいPermissionCollectionオブジェクトを返します。

    クラス java.security.Permissionで宣言されたメソッド

    checkGuard, getName, toString

    クラス java.lang.Objectで宣言されたメソッド

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • コンストラクタの詳細

    • SocketPermission

      public SocketPermission(String host, String action)
      指定されたアクションを持つ新しいSocketPermissionオブジェクトを生成します。 ホストは、DNS名、数値によるIPアドレスのいずれかで表されます。 オプションで、ポートまたはポート範囲も指定できます(DNS名またはIPアドレスとの間はコロンで区切る)。

      ローカル・マシンを指定するには、「localhost」をhostとして使用します。 ノート: 空のhost文字列(「」)は、「localhost」と等価です。

      actionsパラメータには、指定されたホスト(および1つ以上のポート)に許可するアクションのカンマ区切りリストが含まれます。 指定可能なアクションは、「connect」、「listen」、「accept」、「resolve」、またはそれらの任意の組み合わせです。「resolve」は、ほかの3つのいずれかが指定された場合には自動的に追加されます。

      SocketPermissionのインスタンス生成の例を次に示します。

          nr = new SocketPermission("www.example.com", "connect");
          nr = new SocketPermission("www.example.com:80", "connect");
          nr = new SocketPermission("*.example.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 - アクション文字列。
      例外:
      NullPointerException - パラメータがnullの場合
      IllegalArgumentException - hostの形式が無効であるか、action文字列が空であるか不正であるか、または指定された可能性のあるアクション以外のアクションが含まれています
  • メソッドの詳細

    • implies

      public boolean implies(Permission p)
      指定されたアクセス権が、このソケット・アクセス権オブジェクトに含まれているかどうかを判定します。

      具体的には、このメソッドは最初に、次の条件がtrueであることを確認します。これらの条件が1つでもtrueでない場合、このメソッドはfalseを返します。

      • pがSocketPermissionのインスタンスである。
      • pのアクションは、このオブジェクトのアクションの適切なサブセットである
      • pのポート範囲が、このポート範囲に収まる。 ノート: pにアクション「resolve」しか含まれていない場合、ポート範囲は無視される。
      次に、impliesは、次の条件を順番に確認し、条件に該当する場合は、それぞれについてtrueを返します。
      • このオブジェクトが単一のIPアドレスで初期化されている場合に、pのIPアドレスの1つが、このオブジェクトのIPアドレスと等しい。
      • このオブジェクトがワイルドカード・ドメイン(例: *.example.com)で、p正規名(名前に先行しない*)がこのオブジェクト標準ホスト名で終わる場合。 たとえば、*.example.comは*.foo.example.comのように指定します。
      • このオブジェクトが複数のIPアドレスでは初期化されている場合に、このオブジェクトのIPアドレスの1つが、pのIPアドレスの1つと等しい。
      • この(オブジェクトの)正式な名前が、pの正規の名前と等しい。
      以上が1つもtrueでない場合、impliesはfalseを返します。

      定義:
      implies 、クラス:  Permission
      パラメータ:
      p - チェック対象のアクセス権。
      戻り値:
      指定されたアクセス権がこのオブジェクトに含まれる場合はtrue、そうでない場合はfalse。
    • equals

      public boolean equals(Object obj)
      2つのSocketPermissionオブジェクトが等しいかどうかを判定します。
      定義:
      equals 、クラス:  Permission
      パラメータ:
      obj - このオブジェクトと等しいかどうかが判定されるオブジェクト。
      戻り値:
      objがSocketPermissionであり、このSocketPermissionオブジェクトと同じホスト名、ポート範囲、およびアクションを持つ場合はtrue。 ただし、objにアクション「resolve」しか含まれていない場合は、比較時にポート範囲が無視されます。
      関連項目:
      Object.hashCode()HashMap
    • hashCode

      public int hashCode()
      このオブジェクトのハッシュ・コード値を返します。
      定義:
      hashCode 、クラス:  Permission
      戻り値:
      このオブジェクトのハッシュ・コード値。
      関連項目:
      Object.equals(java.lang.Object), System.identityHashCode(java.lang.Object)
    • getActions

      public String getActions()
      アクションの正規の文字列表現を返します。 現在のアクションを、常に次の順序で返します。connect、listen、accept、resolve。
      定義:
      getActions 、クラス:  Permission
      戻り値:
      アクションの正規の文字列表現。
    • newPermissionCollection

      public PermissionCollection newPermissionCollection()
      SocketPermissionオブジェクトを格納するための、新しいPermissionCollectionオブジェクトを返します。

      SocketPermissionオブジェクトの格納形式は、同オブジェクトを任意の順番でコレクションに挿入でき、さらに、PermissionCollectionのimpliesメソッドが効率的かつ矛盾のないように実装できる形式である必要があります。

      オーバーライド:
      newPermissionCollection、クラス: Permission
      戻り値:
      SocketPermissionsを格納するのに適切な新しいPermissionCollectionオブジェクト。