【问题标题】:Java RMI: exception: java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")Java RMI:异常:java.security.AccessControlException:访问被拒绝(“java.net.SocketPermission”“127.0.0.1:1099”“connect,resolve”)
【发布时间】:2018-01-29 19:29:57
【问题描述】:

我正在尝试使用以下命令行输入运行我的第一个 Java RMI 客户端-服务器应用程序。

java -cp eclipse-workspace -Djava.rmi.server.codebase=file:/eclipse-workspace -Djava.rmi.server.hostname=localhost -Djava.security.policy=rmidemo.policy -Djava.security.debug =访问 ct/ExamEngine

rmidemo.policy 文件:

grant codeBase "file:/Users/user/eclipse-workspace/rimdemo/src/ct" {
permission java.security.AllPermission;

};

堆栈跟踪是:

访问:允许访问(“java.io.FilePermission” "/Users/user/eclipse-workspace" "read") 访问:允许访问 (“java.security.SecurityPermission” “getProperty.networkaddress.cache.ttl”)访问:允许访问 ("java.util.PropertyPermission" "sun.net.inetaddr.ttl" "read") 访问: 允许访问(“java.security.SecurityPermission” “getProperty.networkaddress.cache.negative.ttl”)访问:访问 允许(“java.util.PropertyPermission”“com.sun.sdp.conf”“读取”) 访问:允许访问(“java.lang.RuntimePermission” “loadLibrary.net”)访问:允许访问(“java.io.FilePermission” “/库/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/jre/lib/libnet.dylib” “读取”)访问:允许访问(“java.lang.RuntimePermission” "modifyThreadGroup") 访问:允许访问 ("java.lang.RuntimePermission" "modifyThreadGroup") 访问:访问 允许 ("java.lang.RuntimePermission" "getClassLoader") 访问: 允许访问(“java.lang.RuntimePermission”“modifyThreadGroup”) 访问:允许访问(“java.lang.RuntimePermission”“modifyThread”) 访问:允许访问(“java.lang.RuntimePermission” "setContextClassLoader") 访问:允许访问 ("java.lang.RuntimePermission" "modifyThread") 访问:允许访问 ("java.util.PropertyPermission" "sun.rmi.dgc.logLevel" "read") 访问: 允许访问(“java.util.logging.LoggingPermission”“控制”) 访问:允许访问(“java.util.logging.LoggingPermission” “控制”)访问:允许访问(“java.util.PropertyPermission” "java.rmi.dgc.leaseValue" "read") 访问:允许访问 (“java.util.PropertyPermission”“sun.rmi.dgc.checkInterval”“读取”) 访问:允许访问(“java.util.logging.LoggingPermission” “控制”)访问:允许访问 ("java.util.logging.LoggingPermission" "控制") 访问:访问 允许(“java.util.PropertyPermission” "sun.rmi.runtime.schedulerThreads" "read") 访问:允许访问 ("java.lang.RuntimePermission" "sun.rmi.runtime.RuntimeUtil.getInstance") 访问:允许访问 ("java.lang.RuntimePermission" "getProtectionDomain") 访问:访问 允许(“java.util.PropertyPermission” "jdk.internal.lambda.dumpProxyClasses" "read") 访问:允许访问 ("java.lang.reflect.ReflectPermission" "suppressAccessChecks") 访问: 允许访问(“java.util.PropertyPermission” "sun.rmi.transport.dgcFilter" "read") 访问:允许访问 (“java.security.SecurityPermission” "getProperty.sun.rmi.transport.dgcFilter") 访问:允许访问 ("java.lang.RuntimePermission" "setContextClassLoader") 访问:访问 允许(“java.util.PropertyPermission”“java.rmi.server.hostname” “读取”)访问:允许访问(“java.lang.reflect.ReflectPermission” "suppressAccessChecks") 访问:允许访问 ("java.lang.reflect.ReflectPermission" "suppressAccessChecks") 访问: 允许访问(“java.lang.RuntimePermission”“setContextClassLoader”) 访问:允许访问(“java.lang.RuntimePermission” "getClassLoader") 访问:允许访问 ("java.lang.RuntimePermission" "modifyThreadGroup") 访问:访问 允许(“java.lang.RuntimePermission”“modifyThread”)访问:访问 允许(“java.lang.RuntimePermission”“setContextClassLoader”) 访问:允许访问(“java.lang.RuntimePermission”“modifyThread”) 访问:允许访问(“java.lang.RuntimePermission” "modifyThreadGroup") 访问:允许访问 ("java.lang.RuntimePermission" "modifyThreadGroup") 访问:访问 允许(“java.lang.RuntimePermission”“modifyThread”)访问:访问 允许(“java.lang.RuntimePermission”“modifyThread”)访问:访问 允许(“java.lang.RuntimePermission”“modifyThread”)访问:访问 允许(“java.lang.reflect.ReflectPermission”“suppressAccessChecks”) 访问:允许访问(“java.lang.reflect.ReflectPermission” "suppressAccessChecks") 访问:允许访问 ("java.lang.reflect.ReflectPermission" "suppressAccessChecks") 访问: 允许访问(“java.lang.reflect.ReflectPermission” "suppressAccessChecks") 访问:访问被拒绝 (“java.net.SocketPermission”“MacBook-Pro.local”“解决”) java.lang.Exception:堆栈跟踪 java.lang.Thread.dumpStack(Thread.java:1336) 在 java.security.AccessControlContext.checkPermission(AccessControlContext.java:462) 在 java.security.AccessController.checkPermission(AccessController.java:884) 在 java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 在 java.lang.SecurityManager.checkConnect(SecurityManager.java:1048) 在 java.net.InetAddress.getLocalHost(InetAddress.java:1477) 在 java.rmi.registry.LocateRegistry.getRegistry(LocateRegistry.java:158) 在 java.rmi.registry.LocateRegistry.getRegistry(LocateRegistry.java:123) 在 java.rmi.registry.LocateRegistry.getRegistry(LocateRegistry.java:75) 在 ct.ExamEngine.main(ExamEngine.java:64) 访问:允许访问 ("java.security.SecurityPermission" "getPolicy") 访问:访问 允许(“java.io.FilePermission”“/Users/user/eclipse-workspace” "read") 访问:ProtectionDomain 失败的域 (文件:/Users/user/eclipse-workspace/) sun.misc.Launcher$AppClassLoader@2a139a55 java.security.Permissions@27bc2616 (("java.net.SocketPermission" “本地主机:0”“听,解决”)(“java.io.FilePermission” "/Users/user/eclipse-workspace/-" "读取") ("java.lang.RuntimePermission" "exitVM") ("java.lang.RuntimePermission" "stopThread") (“java.util.PropertyPermission”“java.specification.version”“读取”) (“java.util.PropertyPermission”“java.version”“读取”) (“java.util.PropertyPermission”“os.arch”“读取”) (“java.util.PropertyPermission”“java.specification.vendor”“读取”) (“java.util.PropertyPermission”“java.vm.specification.name”“读取”) (“java.util.PropertyPermission”“java.vm.vendor”“读取”) (“java.util.PropertyPermission”“path.separator”“读取”) (“java.util.PropertyPermission”“os.version”“读取”) (“java.util.PropertyPermission”“file.separator”“读取”) (“java.util.PropertyPermission”“line.separator”“读取”) (“java.util.PropertyPermission”“java.vm.specification.vendor”“读取”) (“java.util.PropertyPermission”“java.specification.name”“读取”) (“java.util.PropertyPermission”“java.vendor.url”“读取”) (“java.util.PropertyPermission”“java.vendor”“读取”) (“java.util.PropertyPermission”“java.vm.version”“读取”) (“java.util.PropertyPermission”“java.vm.name”“读取”) ("java.util.PropertyPermission" "java.vm.specification.version" "读取") ("java.util.PropertyPermission" "os.name" "读取") ("java.util.PropertyPermission" "java.class.version" "读取"))

访问:允许访问(“java.util.PropertyPermission” "java.rmi.server.hostname" "read") 访问:允许访问 ("java.util.PropertyPermission" "sun.rmi.transport.connectionTimeout" “读取”)访问:允许访问(“java.util.PropertyPermission” "sun.rmi.transport.tcp.handshakeTimeout" "read") 访问:访问 允许(“java.util.PropertyPermission” "sun.rmi.transport.tcp.responseTimeout" "read") 访问:允许访问 ("java.lang.RuntimePermission" "sun.rmi.runtime.RuntimeUtil.getInstance") 访问:允许访问 ("java.util.PropertyPermission" "jdk.net.ephemeralPortRange.low" “读取”)访问:允许访问(“java.lang.RuntimePermission” “loadLibrary.net”)访问:允许访问(“java.io.FilePermission” “/库/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/jre/lib/libnet.dylib” “读取”)访问:允许访问(“java.util.PropertyPermission” "os.name" "read") 访问:允许访问 ("java.util.PropertyPermission" "jdk.net.ephemeralPortRange.high" “读取”)访问:访问被拒绝(“java.net.SocketPermission” “127.0.0.1:1099”“连接,解决”)java.lang.Exception:堆栈跟踪 在 java.lang.Thread.dumpStack(Thread.java:1336) 在 java.security.AccessControlContext.checkPermission(AccessControlContext.java:462) 在 java.security.AccessController.checkPermission(AccessController.java:884) 在 java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 在 java.lang.SecurityManager.checkConnect(SecurityManager.java:1051) 在 java.net.Socket.connect(Socket.java:584) 在 java.net.Socket.connect(Socket.java:538) 在 java.net.Socket.(Socket.java:434) 在 java.net.Socket.(Socket.java:211) 在 sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40) 在 sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:148) 在 sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613) 在 sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216) 在 sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202) 在 sun.rmi.server.UnicastRef.newCall(UnicastRef.java:338) 在 sun.rmi.registry.RegistryImpl_Stub.rebind(RegistryImpl_Stub.java:147) 在 ct.ExamEngine.main(ExamEngine.java:65) 访问:允许访问 ("java.security.SecurityPermission" "getPolicy") 访问:访问 允许(“java.io.FilePermission”“/Users/user/eclipse-workspace” "read") 访问:ProtectionDomain 失败的域 (文件:/Users/user/eclipse-workspace/) sun.misc.Launcher$AppClassLoader@2a139a55 java.security.Permissions@4fca772d (("java.net.SocketPermission" “本地主机:0”“听,解决”)(“java.io.FilePermission” "/Users/user/eclipse-workspace/-" "读取") ("java.lang.RuntimePermission" "exitVM") ("java.lang.RuntimePermission" "stopThread") (“java.util.PropertyPermission”“java.specification.version”“读取”) (“java.util.PropertyPermission”“java.version”“读取”) (“java.util.PropertyPermission”“os.arch”“读取”) (“java.util.PropertyPermission”“java.specification.vendor”“读取”) (“java.util.PropertyPermission”“java.vm.specification.name”“读取”) (“java.util.PropertyPermission”“java.vm.vendor”“读取”) (“java.util.PropertyPermission”“path.separator”“读取”) (“java.util.PropertyPermission”“os.version”“读取”) (“java.util.PropertyPermission”“file.separator”“读取”) (“java.util.PropertyPermission”“line.separator”“读取”) (“java.util.PropertyPermission”“java.vm.specification.vendor”“读取”) (“java.util.PropertyPermission”“java.specification.name”“读取”) (“java.util.PropertyPermission”“java.vendor.url”“读取”) (“java.util.PropertyPermission”“java.vendor”“读取”) (“java.util.PropertyPermission”“java.vm.version”“读取”) (“java.util.PropertyPermission”“java.vm.name”“读取”) ("java.util.PropertyPermission" "java.vm.specification.version" "读取") ("java.util.PropertyPermission" "os.name" "读取") ("java.util.PropertyPermission" "java.class.version" "读取"))

ExamEngine 异常:java.security.AccessControlException:访问 拒绝(“java.net.SocketPermission”“127.0.0.1:1099” “连接,解决”)在 java.security.AccessControlContext.checkPermission(AccessControlContext.java:472) 在 java.security.AccessController.checkPermission(AccessController.java:884) 在 java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 在 java.lang.SecurityManager.checkConnect(SecurityManager.java:1051) 在 java.net.Socket.connect(Socket.java:584) 在 java.net.Socket.connect(Socket.java:538) 在 java.net.Socket.(Socket.java:434) 在 java.net.Socket.(Socket.java:211) 在 sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40) 在 sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:148) 在 sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613) 在 sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216) 在 sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202) 在 sun.rmi.server.UnicastRef.newCall(UnicastRef.java:338) 在 sun.rmi.registry.RegistryImpl_Stub.rebind(RegistryImpl_Stub.java:147) 在 ct.ExamEngine.main(ExamEngine.java:65)

[编辑] 如果还不清楚问题出在安全管理器上,当我将其删除时,它可以工作,但对于这个应用程序来说是必需的,所以我需要想办法解决这个问题。

【问题讨论】:

    标签: java eclipse rmi


    【解决方案1】:

    试试这个...

    启动 RMI 注册表
    rmiregistry &

    启动服务器(不要忘记末尾的“&”,以便它在后台运行)
    注意: 当代码库属性值设置为目录的 URL 时,该值必须以“/”结尾。
    -Djava.security.policy=/Users/user/eclipse-workspace/rimdemo/src/ct/rmidemo.policy -Djava.rmi.server.codebase=file:/Users/user/eclipse-workspace/rimdemo/src/ct/

    启动客户端
    -Djava.security.policy=/Users/user/eclipse-workspace/rimdemo/src/ct/rmidemo.policy

    您的服务器策略应该是:

    授予{

    权限 java.security.AllPermission;

    };

    您的客户政策应该是:

    授予{

    权限 java.security.AllPermission;

    };

    注意:您可能只对客户端和服务器使用相同的策略文件。另请注意,您的类路径必须是类文件树的根目录

    【讨论】:

    • 对不起,我的命令行由于某种原因造成了这种情况。我使用了与您上面提到的相同的参数,但它会导致该错误。
    • 我要回家了,明天可以尝试再研究一下!如果你让它工作,请告诉我,我记得其他人是通过确保他们在与类文件相同的文件夹中运行代码来修复的。
    • 我可以通过删除安全管理器来运行它,但不幸的是这个项目需要它。
    • @ConorNaylor,感谢您将其标记为正确 - 我认为它有效吗?
    • 我今天才开始工作,经过一番委屈。你的答案是正确的,但我仍然设法把它弄得一团糟。谢谢
    猜你喜欢
    • 2015-06-30
    • 2015-08-13
    • 1970-01-01
    • 2015-09-11
    • 2023-03-16
    • 1970-01-01
    • 2014-09-24
    • 2015-02-23
    • 1970-01-01
    相关资源
    最近更新 更多