1

次の HttpGet() 関数があります。

    HttpGet request = new HttpGet(url);

    request.setHeader("User-Agent", userAgent);
    request.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
    request.setHeader("Accept-Language", "en-US,en;q=0.5");
    if (!cookies.equals(""))
        request.setHeader("Cookie", this.cookies);

    for (Map.Entry<String, String> header : tempHeaders.entrySet())
    {
        request.setHeader(header.getKey(), header.getValue());
    }
    tempHeaders.clear();

    HttpResponse response = client.execute(request);

この関数は、Apache の HttpClient をラップする Browser() クラスの一部です。アプレット ビューアでアプレットを実行すると、すべて正常に動作します。ただし、アプレットをページに埋め込むと、次の例外が発生します。

java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:80" "connect,resolve")
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkConnect(Unknown Source)
    at sun.plugin2.applet.SecurityManagerHelper.checkConnectHelper(Unknown Source)
    at sun.plugin2.applet.AWTAppletSecurityManager.checkConnect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:117)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:178)
    at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:304)
    at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445)
    at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:863)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106)
    **at vidinstant.HttpBrowser.Get(HttpBrowser.java:60)**
    at vidinstant.ServerThread$1.run(ServerThread.java:201)
    at vidinstant.ServerThread$1.run(ServerThread.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at vidinstant.ServerThread.GetLink(ServerThread.java:196)
    at vidinstant.ServerThread.run(ServerThread.java:95)

例外の「ソース」が Browser クラスの 60 行目にあることがわかります。より正確には、上記のコードの抜粋からの次の行です。

  HttpResponse response = client.execute(request);

アプレット .jar に自己署名しました。マニフェスト ファイルには「Permissions: all-permissions」という行があります。

この例外が発生するのはなぜですか? また、アクセスが拒否されるのはなぜですか? ブラウザでアプレットを実行するユーザーは、[許可] をクリックして [ブロックしない] をクリックしますが、それでも機能しません。Apache のライブラリ .jar も署名する必要がありますか? マニフェストに「すべての権限」が必要ですか? ユーザーがJavaポリシーファイルをいじる必要なく、そのような機能を実行する許可を取得するにはどうすればよいですか?

4

1 に答える 1