如何禁用Java安全管理器?

Paw*_*ski 16 java security reflection db4o

有没有办法完全禁用Java安全管理器?

我正在试验db4o的源代码.它使用反射来持久化对象,并且安全管理器似乎不允许反射来读写私有或受保护的字段.

我的代码:

public static void main(String[] args) throws IOException {
    System.out.println("start");
    new File( DB_FILE_NAME ).delete();
    ObjectContainer container = Db4o.openFile( DB_FILE_NAME );
    String ob = new String( "test" );
    container.store( ob );
    ObjectSet result = container.queryByExample( String.class );
    System.out.println( "retrieved (" + result.size() + "):" );
    while( result.hasNext() ) {
        System.out.println( result.next() );
    }
    container.close();
    System.out.println("finish");
}
Run Code Online (Sandbox Code Playgroud)

输出:

start
[db4o 7.4.68.12069   2009-04-18 00:21:30] 
 AccessibleObject#setAccessible() is not available. Private fields can not be stored.
retrieved (0):
finish


这个帖子建议修改java.policy文件以允许反射但它似乎对我不起作用.

我正在使用参数启动JVM,
-Djava.security.manager -Djava.security.policy==/home/pablo/.java.policy
因此指定的策略文件将是唯一使用的策略文件

该文件如下所示:

grant {
    permission java.security.AllPermission;
    permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
};

我花了最后3个小时对此并没有任何想法如何使这项工作.任何帮助赞赏.

hal*_*ave 6

您可以尝试将其添加到程序的main()中:

System.setSecurityManager(null);
Run Code Online (Sandbox Code Playgroud)

当我遇到安全管理器问题时,为我工作了一个"可信"的WebStart应用程序.不确定它是否适用于您的db4o案例,但它可能值得一试.

编辑:我不是说这是安全管理器问题的一般解决方案.我只是提出它作为一种帮助调试原始海报问题的方法.显然,如果您想从安全管理器中受益,那么您不应该禁用它.

  • 原始海报*是*希望'完全禁用'安全经理!:-) (8认同)
  • 好吧,安全管理器可以阻止设置安全管理器,这对攻击者不利,但它允许创建一个"超级"安全管理器,在整个程序流程的其余部分保持永久性. (2认同)

eri*_*son 5

你的java.security.policy命令行选项中真的有两个'='符号吗?那不行.确保将属性设置为

-Djava.security.policy=/home/pablo/.java.policy
Run Code Online (Sandbox Code Playgroud)

要实际禁用它SecurityManager,只需java.security.manager完全取消系统属性即可.


更新:当我阅读策略文件的文档以了解有关"=="语法的更多信息时,我注意到除非策略文件位于当前工作目录中,否则需要将其指定为URL(包括方案).您是否尝试使用"file:"方案为策略路径添加前缀?

我也感到困惑,因为(假设您以"pablo"用户身份运行),默认情况下应该从您的主目录加载该策略,因此您根本不需要指定它.另一方面,如果您没有以"pablo"用户身份运行,则该文件可能无法读取.

  • 这不起作用.也没有将任何参数传递给JVM.BTW'=='表示指定的文件将是唯一使用的文件.单个"="表示该文件将与标准策略文件一起使用.至少那是我读过的. (4认同)