1

我有一个方法 A 可能如下所示:

public double A{
  if (secM == null) {
    secM = new SecurityManager();
    System.setSecurityManager(secM);
  }
  //do something and return a double

}

问题是,一旦设置了 SecurityManager,它就适用于整个项目,但我只需要它用于这个方法所在的类。我如何告诉 SecurityManager 只验证这个方法/类的权限?

4

1 回答 1

3

您希望 SecurityManager 阻止哪些操作,以及您希望允许哪些操作?SecurityManager 更常用于通过任何方法控制特定操作,而不是通过单个方法控制操作。

但是,它也可以通过创建一个检查调用堆栈的自定义 SecurityManager 来执行后者 - 请参阅此答案以获取示例 - 这是您需要的吗?

您可以为系统范围的 SecurityManager 提供针对您的应用程序量身定制的策略,这样您就可以允许大多数事情,但阻止一小部分操作。您可以控制的权限在此处列出

更新:您可以通过将您的方法拉出到一个单独的类中来更优雅地做到这一点,该类可以与其他类分开加载(由不同的类加载器)。请参阅此示例。然后你可以用类加载器做一个简单的检查,而不是检查完整的堆栈跟踪。但是,我不熟悉这种方法 - 如果来自两个单独的类加载器的类需要交互,则可能会产生影响......

于 2012-02-28T13:00:56.570 回答