モジュール java.base
パッケージ 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つだけ使うことができます。 これを使う場合は、「*.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とそれより下のすべてのポート番号を表します。 特殊なポート値0は、一時的なポートの範囲全体を指します。 これは固定のポート範囲です。システムではこの範囲から動的ポートを割り当てることができます。 実際の範囲はシステムによって異なります。

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

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

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

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

       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のポートに対して、接続の受け入れ、接続、待機を行うことを許可されます。

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

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

      • 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.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 - アクション文字列。
    • メソッドの詳細

      • implies

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

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

        • pがSocketPermissionのインスタンスである。
        • pのアクションは、このオブジェクトのアクションの適切なサブセットである
        • pのポート範囲が、このポート範囲に収まる。 注: pにアクション「resolve」しか含まれていない場合、ポート範囲は無視される。
        次に、impliesは、次の条件を順番に確認し、条件に該当する場合は、それぞれについてtrueを返します。
        • このオブジェクトが単一のIPアドレスで初期化されている場合に、pのIPアドレスの1つが、このオブジェクトのIPアドレスと等しい。
        • このオブジェクトが、*.sun.comのようにワイルドカードを含むドメイン名である場合に、pの正規の名前(*文字を除いた名前)が、このオブジェクトの正式なホスト名で終わる。 たとえば、*.sun.comは*.eng.sun.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
      • getActions

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

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

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

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