java.net.SocketPermission для localhost не будет работать на Java 1.8, но с вашим локальным IP это работает
У меня странная проблема с политикой 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, кто-нибудь может подтвердить это?
2 ответа
Я думаю, что нашел то, что искал: http://bugs.java.com/bugdatabase/view_bug.do?bug_id=7077696
Предложенный обходной путь там работает для меня.
2011-11-09 РАБОТА Вокруг
Запустить с -Djava.net.preferIPv4Stack=true
Спасибо за вашу помощь!
"localhost" - это 127.0.0.1. "10.1.17.112" - это нечто совсем другое. Тебе повезло, что это вообще сработало.