1

RMI用の簡単なHelloworldプログラムを作成しました。クライアントがコンソールにあるとき、それはうまく機能します。クライアントとしてSwingアプリケーションを使用してみましたが、それでも問題なく動作しました。

しかし、アプレットをクライアントとして使用すると、次の例外がスローされます。

Exception in thread "AWT-EventQueue-1" java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:1099 connect,resolve)
        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
        at java.security.AccessController.checkPermission(AccessController.java:546)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
        at java.lang.SecurityManager.checkConnect(SecurityManager.java:1034)
        at java.net.Socket.connect(Socket.java:524)
        at java.net.Socket.connect(Socket.java:478)
        at java.net.Socket.<init>(Socket.java:375)
        at java.net.Socket.<init>(Socket.java:189)
        at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
        at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
        at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)
        at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198)
        at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
        at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322)
        at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
        at java.rmi.Naming.lookup(Naming.java:84)
        at Client.<init>(Client.java:23)
        at MyApplet.submitActionPerformed(MyApplet.java:179)
        at MyApplet.access$300(MyApplet.java:22)
        at MyApplet$4.actionPerformed(MyApplet.java:84)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6263)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6028)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

それはなぜですか、そしてプログラムを機能させるために何ができますか?

4

2 に答える 2

3

このリンクで、この問題を解決するために必要な情報が得られるかどうかを確認してください。

セキュリティ マネージャで呼び出されるすべてのアプレットとアプリケーションには、プログラムが呼び出されるディレクトリとそのサブディレクトリへの読み取りアクセスとは別に、ローカル システム リソースにアクセスするための明示的なアクセス許可が付与されている必要があります。Java プラットフォームには、さまざまな種類のローカル情報へのさまざまなレベルのアクセスを許可するアクセス許可が用意されています。

さまざまなアクセス許可とポリシー ファイルの詳細については、上記のリンクを参照してください。

于 2011-03-06T10:31:06.923 に答える
2

アプレットの場合、ネットワーク アクセスの単純なセキュリティ ルールは次のとおりです。アプレットには、送信元のリモート サーバーに接続する権限がありますが、それ以外は何もありません。

そのため、アプレットが存在する Web サーバーでもある同じサーバーで RMI レジストリを実行する必要があります。

于 2011-03-06T12:38:31.810 に答える