Настройка Java SecurityManager только для одного метода - PullRequest
1 голос
/ 28 февраля 2012

У меня есть метод A, который может выглядеть следующим образом:

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

}

Проблема в том, что, как только SecurityManager установлен, он предназначен для всего проекта, но мне нужно, чтобы он был только для класса, в котором находится этот метод. Как я могу сказать SecurityManager проверять только разрешения для этого метода / класса?

1 Ответ

3 голосов
/ 28 февраля 2012

Какие действия вы хотите, чтобы SecurityManager предотвращал, и какие вы хотите разрешить? SecurityManager чаще используется для управления определенными действиями с помощью любого метода, а не действий с помощью одного метода.

Однако он может сделать и последнее, создав собственный SecurityManager, который проверяет стек вызовов - см. этот ответ для примера - это то, что вам нужно?

Вы можете предоставить общесистемному SecurityManager политику, адаптированную к вашему приложению, так что вы можете разрешить большинство вещей, но предотвратить небольшой набор действий. Разрешения, которые вы можете контролировать, перечислены здесь .

Обновление : вы могли бы сделать это более элегантно, вытащив свой метод в отдельный класс, который может быть загружен отдельно (другим загрузчиком классов), чем ваш другой классы. См. этот пример . Затем вы можете выполнить тривиальную проверку с помощью загрузчика классов вместо проверки полной трассировки стека. Однако я не знаком с этим методом - могут быть последствия, если классы из двух отдельных загрузчиков классов должны взаимодействовать ...

...