首页 > 解决方案 > Java 安全管理器(奇怪的行为)

问题描述

我正在Java Security Manager一个简单的 java 应用程序中进行测试。

我写属性"user.home", "user.info"

我读了属性"user.home""user.info"

"user.home"我设置了一个允许在,上读/写的策略文件"user.info"

我开始一个Security Manager

我应该仍然能够 read/write "user.home""user.info"因为策略文件提供了权限。

但我得到一个安全例外。

怎么了?

我的Java代码是:

import java.security.AccessControlException;

public class TestSecurityManager {


final static String securityPolicyFile = "properties_permissions.policy"; 


public static void main(String[] args) {

    System.setProperty("user.info", "123456");
    System.out.println("user.info is : " + System.getProperty("user.info"));

    // Enable the security manager
    try {
        System.out.println("***");
        System.out.println("Setting policy file");
        System.out.println("***");
        System.setProperty(securityPolicyFile, securityPolicyFile);
        System.out.println("***");

        System.out
                .println("Security manager is STILL disabled, "
                        + "read/write access to \"user.info\" system property "
                        + "is allowed"
                        );
        System.out.println("***");
        System.setProperty("user.info", "123456");
        System.out.println("user.info is : " + System.getProperty("user.info"));
        //
        System.out.println("***");
        System.out.println("Setting Security manager");
        System.out.println("***");

        SecurityManager securityManager = new SecurityManager();
        System.setSecurityManager(securityManager);
    } catch (SecurityException se) {

    try {

        System.setProperty("user.info", "123456");
    } catch (AccessControlException acew) {

        System.out.println("!!!Write access to the user.info system property is not allowed!");
    }

    try {

        System.out.println("user.info is : " + System.getProperty("user.info"));
    } catch (AccessControlException acer) {

        System.out.println("Read access to the user.info system property is not allowed!");
    }

}
    }

我的政策文件:

grant {
  permission java.util.PropertyPermission "user.home", "read";
  permission java.util.PropertyPermission "user.info", "write";
};

xxx

标签: javasecuritypropertiesfile-permissionsjava-security-manager

解决方案


您没有正确设置安全策略系统属性。它应该是:

System.setProperty("java.security.policy", securityPolicyFile);

如果设置后仍然无法正常工作,请使用标志打开调试-Djava.security.debug=policy并检查文件是否被正确读取。你应该看到这样的一行:

策略:读取文件:/path/to/your/properties_permissions.policy


推荐阅读