localhost的java.net.SocketPermission赢得';在Java1.8上不起作用,但在本地IP上起作用

localhost的java.net.SocketPermission赢得';在Java1.8上不起作用,但在本地IP上起作用,java,java-8,javapolicy,Java,Java 8,Javapolicy,我对Java8策略有一个看似奇怪的问题 我在Java 7 up 51中使用了以下权限,并且运行良好: grant { (...) java.net.SocketPermission "localhost:1024-", "accept,connect,listen,resolve"; }; 但现在我正在检查Java 8支持,我得到了一个例外: Exception in thread "RMI TCP Connection(idle)" java.security.Access

我对Java8策略有一个看似奇怪的问题

我在Java 7 up 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";
};
你知道为什么吗

编辑:
对我来说,这似乎是Java8中的一个Bug,有人能证实这一点吗

“localhost”是127.0.0.1。“10.1.17.112”完全是另一回事。幸运的是,它曾经工作过。

“localhost”是127.0.0.1。“10.1.17.112”完全是另一回事。幸运的是,它曾经工作过。

“localhost”是127.0.0.1。“10.1.17.112”完全是另一回事。幸运的是,它曾经工作过。

“localhost”是127.0.0.1。“10.1.17.112”完全是另一回事。你真幸运,它居然奏效了。

我想我找到了我要找的东西:

建议的解决方法对我很有效

2011-11-09 变通

使用-Djava.net.preferIPv4Stack=true运行


谢谢你的帮助

我想我找到了我想要的东西:

建议的解决方法对我很有效

2011-11-09 变通

使用-Djava.net.preferIPv4Stack=true运行


谢谢你的帮助

我想我找到了我想要的东西:

建议的解决方法对我很有效

2011-11-09 变通

使用-Djava.net.preferIPv4Stack=true运行


谢谢你的帮助

我想我找到了我想要的东西:

建议的解决方法对我很有效

2011-11-09 变通

使用-Djava.net.preferIPv4Stack=true运行



谢谢你的帮助

我唯一能想到的是,您在安全文件中使用了
127.0.0.1
,在代码中使用了
localhost
。如果JVM在解析名称之前检查了权限,这可能是问题所在。@SJuan76但我在java.policy中尝试了这两种方法,并且都导致了相同的错误。我唯一能想到的是,您在安全文件中使用了
127.0.0.1
,在代码中使用了
localhost
。如果JVM在解析名称之前检查了权限,这可能是问题所在。@SJuan76但我在java.policy中尝试了这两种方法,并且都导致了相同的错误。我唯一能想到的是,您在安全文件中使用了
127.0.0.1
,在代码中使用了
localhost
。如果JVM在解析名称之前检查了权限,这可能是问题所在。@SJuan76但我在java.policy中尝试了这两种方法,并且都导致了相同的错误。我唯一能想到的是,您在安全文件中使用了
127.0.0.1
,在代码中使用了
localhost
。如果JVM在解析名称之前检查了权限,这可能是问题所在。@SJuan76但我在java.policy中尝试了这两种方法,并且都导致了相同的错误。我觉得这不是我问题的答案,你能澄清一下吗?我只是在代码和权限中使用Localhost,但出于某种原因,Localhost被翻译成10.1.17.112(在java 7和8中)。在Java 7中,这不是一个问题,它被翻译了,但只要它是本地主机的ip,它就与Java.net.SocketPermission“localhost:1024-”…听起来你可能有可怕的Linux错误配置问题。检查您的
etc/hosts
文件。它应该将“localhost”映射到127.0.0.1,将真实主机名映射到真实IP地址。它与Java没有任何关系。同样的问题也会出现在RMI存根中,这就是为什么要使用
java.RMI.server.hostname
功能。我在Windows上,我的主机文件说:
127.0.0.1 localhost
::1 localhost
当我尝试ping localhost和127.0.0.1时,都能正常工作,所以这不应该是问题,我也在不止一台机器上监测过这个问题……我觉得这不是我问题的答案,你能澄清一下吗?我只是在代码和权限中使用Localhost,但出于某种原因,Localhost被翻译成10.1.17.112(在java 7和8中)。在Java 7中,这不是一个问题,它被翻译了,但只要它是本地主机的ip,它就与Java.net.SocketPermission“localhost:1024-”…听起来你可能有可怕的Linux错误配置问题。检查您的
etc/hosts
文件。它应该将“localhost”映射到127.0.0.1,将真实主机名映射到真实IP地址。它与Java没有任何关系。同样的问题也会出现在RMI存根中,这就是为什么要使用
java.RMI.server.hostname
功能。我在Windows上,我的主机文件说:
127.0.0.1 localhost
::1 localhost
当我尝试ping localhost和127.0.0.1时,都能正常工作,所以这不应该是问题,我也在不止一台机器上监测过这个问题……我觉得这不是我问题的答案,你能澄清一下吗?我只是在代码和权限中使用Localhost,但出于某种原因,Localhost被翻译成10.1.17.112(在java 7和8中)。在Java 7中,这不是一个问题,它被翻译了,但只要它是本地主机的ip,它就与Java.net.SocketPermission“localhost:1024-”…听起来你可能有可怕的Linux错误配置问题。检查您的
etc/hosts
文件。它应该将“localhost”映射到127.0.0.1,将真实主机名映射到真实IP地址。它与Java没有任何关系。同样的问题也会出现在RMI存根中,这就是为什么要使用
java.RMI.server.hostname
功能。我在Windows上,我的主机文件说:
127.0.0.1 localhost
::1 localhost
当我尝试ping localhost和127.0.0.1时,都能正常工作,所以这不应该是问题,我还不止一次监测过这个问题