java - 为什么在从 applet 使用 RMI 时会出现 AccessControlException?

标签 java security applet rmi accesscontrolexception

我为 RMI 编写了一个简单的 Hello world 程序。当客户端在控制台中时,它运行良好。 我尝试使用 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)

为什么会这样,我该怎么做才能使我的程序正常运行?

最佳答案

看看是否this link可能会为您提供解决此问题所需的信息:

All applets and any applications invoked with a security manager must be granted explicit permission to access local system resources apart from read access to the directory and its subdirectories where the program is invoked. The Java platform provides permissions to allow various levels of access to different types of local information.

有关不同权限和策略文件的更多详细信息,请参阅上面的链接。

关于java - 为什么在从 applet 使用 RMI 时会出现 AccessControlException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5209909/

相关文章:

java - Spark SQL : Nested classes to parquet error

security - GAE 是否提供默认的定量滥用保护?

javascript - 如何从浏览器页面源代码中隐藏 AJAX 调用/url?

java - JFileChooser 在通过 JS 调用时导致 AccessControlException,在通过小程序调用时有效

Java - 扩展 HashMap - 对象与泛型行为

java - 在Android中创建以/结尾的目录

java - JApplet加载问题

java - 当我运行 JApplet 时,相同的代码有不同的颜色

java - 在 Spring Batch 中从 Java 类读取数据

mysql - 最佳+最强的数据库加密方法