2011-07-04 6 views
3

Javaアプレットのセキュリティに関連する質問/問題があります。
私はアプレットを使用していますサーバー(ASP.NET)からファイルを取り出し、その情報を表す必要があります。アプレットは、コードを使用してファイルを取る:Javaアプレットのhttp:// localhost:8000 /およびhttp://127.0.0.1:8000/の相違点

  1. Init()は方法
  2. 、だから、JavaScriptの
  3. から手動

と呼ばれるいくつかの他の方法Test()

URL u = new URL(getCodeBase(), filename); 
BufferedReader d = new BufferedReader(new InputStreamReader(u.openStream())); 

このコードは、2つの場所に表示されます私はURL http://127.0.0.1:8000/Test.aspxを使用してアプレットでページをロードしようとすると、すべて正常に動作し、私は両方のファイルの内容を読むことができますエトド私はhttp://localhost:8000/にURLを変更した場合でも、唯一の第一の方法は、正常に動作し、私は、ファイルの内容を取得することができますし、1秒間私はJavaConsoleの次のエラーメッセージが出ます:(アクセスが拒否されました:

java.security.AccessControlExceptionをjava.net.SocketPermission 127.0.0.1:8000 connect、resolve)

この場合の違いは何ですか?この場合、なぜ 'localhost'は不可能なのですか? 127.0.0.1と同じように 'localhost'へのアクセスを許可する方法はありますか?ここ

は、最も簡単なアプレットの例です:

public class TestApplet extends Applet { 

    public void init() 
    { 
     System.out.println("init..."); 

     readDocument(); 
    } 

    public void readDocument() 
    { 
     System.out.println("read test.txt file..."); 

     URL base = getCodeBase(); 
     String filename = "test.txt"; 
     try { 
      URL u = new URL(base, filename); 
      BufferedReader d = new BufferedReader(new InputStreamReader(u.openStream())); 
      System.out.println(d.readLine()); 
      System.out.println("Done!"); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

と、クライアント側で使用される次のコード:

<applet archive="/Content/test.jar" code="test.TestApplet.class" name="testApplet" mayscript></applet> 

<script language="javascript" type="text/javascript"> 
    $(document).ready(function() { 
     var testApplet = document.testApplet; 
     testApplet.readDocument(); 
    }); 
</script> 

私はhttp://127.0.0.1:8000/Test.aspx を使用しようとするときに動作しない場合、このコードは完璧に動作します私のユーザhttp://localhost:8000/Test.aspx。私はJavaコンソールを次のように見ます:

init... 
read test.txt file... 
some text... 
Done! 
read test.txt file... 
java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:8000 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.Applet2SecurityManager.checkConnect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at sun.net.NetworkClient.doConnect(Unknown Source) 
    at sun.net.www.http.HttpClient.openServer(Unknown Source) 
    at sun.net.www.http.HttpClient.openServer(Unknown Source) 
    at sun.net.www.http.HttpClient.<init>(Unknown Source) 
    at sun.net.www.http.HttpClient.New(Unknown Source) 
    at sun.net.www.http.HttpClient.New(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) 
    at java.net.URL.openStream(Unknown Source) 
    at test.TestApplet.readDocument(TestApplet.java:30) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at sun.plugin.javascript.JSInvoke.invoke(Unknown Source) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at sun.plugin.javascript.JSClassLoader.invoke(Unknown Source) 
    at sun.plugin2.liveconnect.JavaClass$MethodInfo.invoke(Unknown Source) 
    at sun.plugin2.liveconnect.JavaClass$MemberBundle.invoke(Unknown Source) 
    at sun.plugin2.liveconnect.JavaClass.invoke0(Unknown Source) 
    at sun.plugin2.liveconnect.JavaClass.invoke(Unknown Source) 
    at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$DefaultInvocationDelegate.invoke(Unknown Source) 
    at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo.doObjectOp(Unknown Source) 
    at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$LiveConnectWorker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

P .:アプレットが署名されています。

+0

"127.0.0.1"にアクセスすると、 "localhost"と呼ばれる場所が表示されないか、localhostに問題があります。 – woliveirajr

+0

javascriptはどのように 'Test'メソッドを呼び出しますか?どのようにURLを作成しますか?ブラウザでアプレットと同じURLを使用していることを確認できますか? – sudocode

+0

はい...スペルミスが変更されました –

答えて

3

JavaScriptからの呼び出しが問題です。 JavaScriptを使用してメソッドを呼び出す場合、呼び出しのパーミッションは、JavaScriptブリッジのパーミッション(つまり、何もない)と自分自身のコードのパーミッション(たとえ自分のコードが署名されていても)の交差点にまで下がります。

これを回避し、アプレットのコードのすべての権限を使用するには、セキュリティ関連の部分をAccessController.doPrivileged(...)コールの中に入れます。(もちろん、あなたのアプレットは何も悪意のあるものを実行できないことを確認する必要があります)

localhostの代わりにIPアドレスを直接使用している場合は、なぜ動作するのかわかりません。

+0

ありがとう!出来た!!!残念ながら、この反応を有益なものとしてマークするのに十分な評判はない。再度、感謝します! –

+0

@Aleksey:この質問をした人として、回答の横にある[承認]ボタン(このチェックマーク記号:✔)を使って、あなたが最も役に立つと思われる回答を受け入れる*ことができます。 –

+0

あなたのソリューションにいくつかのコードを提供できますか? –

2

localhostのので、あなたの環境には、それを修正/設定する必要があり127.0.0.1の別名です。 Windowsでは、ファイルC:¥Windows¥System32¥drivers¥etc¥hostsを編集する必要があります。

+0

私はそれについて考えました...ホストファイルに "127.0.0.1 localhost"があります。助けにならない。 –

+0

Linuxの/ etc/hosts –

+0

@Aleksey私はちょっと調べて、これを見つけましたhttp://stackoverflow.com/questions/2612895/where-to-place-java-applet-policy-fileこのhttp:// imagej.588099.n2.nabble.com/appletviewer-imageJA-trouble-td5943534.html助けてくれることを願って – ascanio

0

localhostは、通常、::1127.0.0.1の両方に解決され、OS/libcは、通常、IPv6がこのような状況で好まれるように設定されます。

したがって、127.0.0.1のみで、IPv6接続では許可していない可能性があります(::1)。

+0

あなたが話していることを正しく理解しているかどうかわかりませんが、ホストファイルに次のような行がコメントアウトされています:127.0.0.1 localhost :: 1 localhost –

関連する問題