2

ftpサーバーにアップロードされたアプレットに取り組んでいます。そのアプレットはMySQLデータベースに接続する必要があります(私が知る限り、これは同じサーバー上にある必要があります)。

注:アプレットは自己署名されています。

  • アプレットをローカルで実行している場合は、正常に機能します。
  • Webブラウザからローカルにアプレットを起動すると、それも完全に機能します。
  • しかし、それをftpサーバーにアップロードし、そのWebサイトから起動すると、4行目でフリーズします(DriverManager.getConnection()メソッド)

public static void initConnection(final Settings info) throws ClassNotFoundException, SQLException
        {
            Class.forName("com.mysql.jdbc.Driver");
            Connection conn = DriverManager.getConnection("jdbc:mysql://" + info.getHost() + ":3306/" + info.getDbName(),
                    info.getUser(), info.getPass());
            stmt = conn.createStatement();
        }
4

2 に答える 2

2

自分で答えたようです。問題は、データベースに接続しようとしてから、接続が完全に機能するまでに約 3 分ほどかかることでした。技術的には、この質問はずっと無効でした。なぜこんなに遅いのかを調べて、見つからない場合は別の質問をします。

繰り返しになりますが、ポリシーやアクセス許可とは何の関係もありません。なんらかの理由で地獄のように遅いだけです。

于 2012-07-19T21:33:50.327 に答える
0

これは、サーバーからアプレットを実行すると、Java Plug-in によって厳密なサンドボックスが設定され、悪意のあるアクションが実行されないようになるためだと思います。これらの 1 つは、他のコンピューターへの接続を確立することです。

データベース ホストのポート 3306 への接続を許可するポリシー ファイルを作成するだけで (生成に使用します。DB ホストに対しておよびアクションで権限policytoolを付与する必要があります)、それを JAR に埋め込みます。コードで、そのファイルを使用してセキュリティ マネージャーを作成します (ここにサンプルがあります)。java.net.SocketPermissionresolveconnect

編集: AppletViewer ログから、使用する復号化クラスには、コードがリモートの場所から起動されたときにデフォルトで付与されていない別のアクセス許可が必要であることに気付きました。上記の手法に従いますが、許可java.lang.RuntimePermission(アクション: accessClassInPackage.sun.misc) も付与すれば問題ありません。

于 2012-07-19T13:35:19.093 に答える