带有SecurityManager策略文件的Java Shipping JAR

问题描述 投票:0回答:1

我正在尝试发布一个执行一些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")

我有一种感觉,我设置的路径是错误的,任何人都可以告诉我这条路应该是什么?

java security jar policy
1个回答
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为我修复它。

© www.soinside.com 2019 - 2024. All rights reserved.