署名されていないJavaアプレットが、アプレットを発信したサーバー以外のサーバーにネットワーク接続することは許可されていません。私のアプレットはサーバーとの会話が必要なので、これは私のアプリケーションでは問題ありません。私は私の開発マシン上のプロセスと通信するためのソケットをオープンしようとするテストアプレットを書いたときしかし、それは次の例外がスローされます。署名されていないJavaアプレットの発信元サーバーへのソケット接続
Error establishing socket connection: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:11000 connect,resolve)
例外を引き起こしたコード:
private void sendMsg(String msg) {
Socket s = null;
try {
s = new Socket("localhost", 11000);
}
catch (Exception e) {
System.err.println("Error establishing socket connection:");
e.printStackTrace();
return;
}
try {
OutputStream out = s.getOutputStream();
out.write(msg.getBytes());
out.flush();
s.shutdownOutput();
s.close();
}
catch (Exception e) {
System.err.println("Error in writing to the socket:");
e.printStackTrace();
}
最初は私の経験では私が見逃していたのは自分のコードの中で問題だったと思った。しかし、公式JavaチュートリアルのTalk Serverの例を実行しようとすると、同じ例外が発生します。これは私に実際にセットアップの問題や、デフォルトのセキュリティ制限の誤解があると信じさせてくれます。アプレットを提供しているマシンであっても、デフォルトのセキュリティマネージャは、アプレットを実行しているマシンに対してソケットを開くのを防ぎますか?もしそうなら、それは私にとっては問題です。配備されたシステムは、実際のサーバにログインしているユーザが、リモートユーザが使用するのと同じアプレットを使用する必要があるからです。例外を回避する方法はありますか?アプレットに署名する必要はありませんか?私は、必要でない場合、トラブルに行きたくありません。
注:私は、ユーザーがサーバーからアプレットにアクセスすることをお勧めしません。これはオリジナルのデザインではありませんでしたが、残念ながらこの実装を私に妥協させました。
更新: Webサーバーからアプレットのページを表示すると、問題が解決されます。サーバがローカルホストであっても。 Java 1.6.0_11のセキュリティアップデートは、ローカルファイルシステムから直接ロードされたアプレットにのみ適用されます。
あなたは、どのWebサーバーを使っていますか教えてください。 –