localhost 的 java.net.SocketPermission 在 Java 1.8 上不起作用,但对于您的本地 IP 却可以

标签 java java-8 javapolicy

我对 Java 8 策略有一个看似奇怪的问题。

我在 Java 7 更新 51 中使用了以下权限,并且运行良好:

grant { 
    (...)
    java.net.SocketPermission "localhost:1024-", "accept,connect,listen,resolve";
};

但现在我正在检查 Java 8 支持,并且收到此异常:

Exception in thread "RMI TCP Connection(idle)" java.security.AccessControlException: access denied ("java.net.SocketPermission" "10.1.17.112:55703" "accept,resolve")
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at sun.plugin2.applet.AWTAppletSecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkAccept(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.checkAcceptPermission(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.checkAcceptPermission(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

运行 IPConfig 显示 10.1.17.122 是我本地计算机的 IP:

   Ethernet adapter Local Area Connection:

   IPv4 Address. . . . . . . . . . . : 10.1.17.112
   Subnet Mask . . . . . . . . . . . : 255.255.252.0
   Default Gateway . . . . . . . . . : 10.1.19.254

如果我将权限更改为 127.0.0.1,它也不起作用:

grant { 
    (...)
    java.net.SocketPermission "127.0.0.1:1024-", "accept,connect,listen,resolve";
};

但是,如果我输入我的 IP 地址,一切都会再次正常工作:

grant { 
    (...)
    java.net.SocketPermission "10.1.17.112:1024-", "accept,connect,listen,resolve";
};

有什么想法吗?

编辑: 对我来说,这似乎是 Java 8 中的一个错误,有人能证实这一点吗?

最佳答案

“本地主机”是 127.0.0.1。 “10.1.17.112”完全是另一回事。你很幸运它曾经有效过。

关于localhost 的 java.net.SocketPermission 在 Java 1.8 上不起作用,但对于您的本地 IP 却可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23731680/

相关文章:

java - Java 项目中的 Eclipse 警告 "Replace the type specification in this constructor call with the diamond operator (' < >')"

java - 是否可以在策略文件的 Jar 文件名中使用通配符?

java - java中的反向链表

java - 用于循环为扫描仪输入添加变量

java - 如何合并两个流?

java - GC(分配失败)VS OutOfMemoryError 异常

linux - AccessDeniedException与tomcat一起走树

Java 8 Windows 权限

java - Hibernate - Envers 将错误数据写入 AUD 列

JavaFX:公开 ObjectProperty 成员而不是 getter/setter?