我有一个方法A,看起来可能如下所示:

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

}


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

最佳答案

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

但是,通过创建一个检查调用堆栈的自定义SecurityManager,它也可以实现后者-例如,请参见this answer-这是您所需要的吗?

您可以为系统范围的SecurityManager提供针对您的应用程序量身定制的策略,因此您可以允许大多数操作,但可以防止执行少量操作。您可以控制的权限为listed here

更新:通过将方法拉到一个单独的类中,您也许可以更优雅地做到这一点,该类可以与其他类分开(通过不同的类加载器)加载。请参见this example。然后,您可以使用类加载器进行简单检查,而不是检查整个堆栈跟踪。但是,我对这种方法不熟悉-如果来自两个单独的类加载器的类需要交互,则可能会有含义。

08-28 07:33