我正在尝试发布执行某些RMI调用的Java应用程序。
我需要将其作为JAR文件发送(这是一项要求,没有办法解决)。
现在,为了允许某些东西(比如套接字和RMI连接),我需要一个SecurityManager和一个Policy文件。
我想在jar中发送此策略文件,并从JAR内部设置策略路径。
现在,这就是我的代码:
public static void main(String[] args)
{
System.setProperty("java.security.policy","jar:file:/Policies/Server.policy");
Policy.getPolicy().refresh();
... /* All other code */
}
当我将路径更改为PC上的路径并运行没有JAR的代码时(一个IntelliJ'应用程序')我在启动应用程序时没有问题,当我尝试运行我的JAR时,我得到以下异常:
Exception in thread "main" java.security.AccessControlException: access denied ("java.net.SocketPermission" "localhost:2000" "listen,resolve")
我感觉我设置的路径是错误的,有人可以告诉我这条路应该是什么吗?
答案 0 :(得分:1)
我能够通过将代码更改为以下内容来解决此问题:
public static void main(String[] args)
{
boolean quit = false;
String serverPolicyPath = "/Policies/Server.policy";
URL serverPolicyURL = Main.class.getResource(serverPolicyPath);
if (serverPolicyURL == null)
{
System.err.println("getResource returned NULL");
return;
}
System.setProperty("java.security.policy",serverPolicyURL.toString());
Policy.getPolicy().refresh();
...
我不是试图手动找出路径,而是让Java为我修复它。