仅为一种方法设置Java SecurityManager

时间:2012-02-28 12:55:53

标签: java permissions securitymanager

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

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

}

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

1 个答案:

答案 0 :(得分:3)

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

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

您可以为系统范围的SecurityManager提供针对您的应用程序定制的策略,这样您就可以允许大多数事情,但可以阻止一小组操作。您可以控制的权限是listed here

更新:您可能能够通过将您的方法拉出到一个单独的类中来更优雅地执行此操作,该类可以单独加载(通过不同的类加载器)你的其他课程。见this example。然后,您可以使用类加载器进行简单的检查,而不是检查完整的堆栈跟踪。但是,我不熟悉这种方法 - 如果来自两个独立的类加载器的类需要交互,可能会产生影响...