Главная » Java » Класс SecurityManager

0

 

   Класс java.lang.SecurityManager позволяет приложениям реализовать политику безопасности посредством предварительного — до выполнения потенциально опасных или "чувствительных" операций — определения того, будут ли таковые выполняться в контексте системы контроля безопасности. Затем приложение по своему "усмотрению" может разрешать или запрещать осуществление каждой из операций.

   (менеджер безопасности) содержит множество методов, наименования которых начинаются с префикса check. Эти методы вызываются многими методами стандартных классов непосредственно перед попыткой выполнения потенциально опасных операций — таких как доступ к файлам, создание потоков вычислений и управление ими, конструирование объектов загрузчиков классов и т.д. — и осуществляют определенные функции контроля, используя механизмы рефлексии (reflection). Непосредственный вызов метода check может выглядеть следующим образом:

 

SecurityManager security = System.getSecurityManager();

 if (security   != null)   {

   security.checkxxxiargument,   …);

 }

Менеджер безопасности наделяется правом предотвращать выполнение операции посредством выбрасывания исключения: модуль менеджера безопасности просто возвращает управление, если операция санкционирована, и генерирует исключение типа Securi tyException, если приложение не обладает полномочиями на ее осуществление.

   Текущий объект менеджера безопасности может быть задан и возвращен с помощью методов класса System, описанных ниже.

 

public static void setSecurityManager(SecurityManager s)

Задает объект системного менеджера безопасности. Если таковой прежде уже был установлен, он заменяется новым объектом (в предположении, что существующий менеджер безопасности поддерживает функцию замены, а программа обладает правом выполнения такой функции — в иных случаях выбрасывается исключение типа Securi tyException).

public static SecurityManager getSecurityManager()

Возвращает ссылку на текущий объект системного менеджера безопасности. Если таковой еще не был установлен, возвращается значение null в этой ситуации предполагается, что приложение обладает полным набором разрешений (permission).

   Менеджер безопасности передает функции фактической проверки полномочий приложения объекту контроля доступа (access control): каждый метод check просто вызывает метод checkPermission менеджера безопасности, передавая тому объект java. security. Permission, отвечающий операции, право на выполнение которой было запрошено; затем метод checkPermission в редакции, предлагаемой по умолчанию, осуществляет вызов одноименного метода класса AccessController,

java.security.AccessController.checkPermission(perm);

Если запрошенная операция позволена, метод checkPermission просто возвращает управление, ничего больше не выполняя. Если же доступ запрещен, выбрасывается объект исключения типа java.security.AccessControlException, производного от SecurityException.

   Такой вариант метода checkPermission всегда осуществляет контроль доступа в контексте текущего потока вычислений, объект которого является членом множества доменов защиты. Если учесть, что домен защиты представляет собой набор классов, которым даны одни и те же разрешения, поток вычислений может быть членом нескольких доменов защиты, поскольку стек вызовов способен содержать единовременно ссылки на методы объектов различных классов.

  Метод getSecurityContext объекта менеджера безопасности возвращает контекст безопасности (security context) для потока вычислений в виде объекта типа Java, security .AccessControlContext. В составе этого класса также определен метод checkPermission, но тот вызывается в заданном контексте, а не в контексте потока-инициатора. Это средство используется в тех случаях, когда из одного контекста (такого как поток вычислений) необходимо выполнить проверку полномочий доступа для другого контекста. Рассмотрим, например, рабочий поток, который выполняет запросы, поступающие из различных источников. Рабочий поток обладает правами на выполнение определенного набора операций, но отправители запросов-заданий могут не иметь тех же самых полномочий. Когда запрос направляется рабочему потоку, вместе с описанием задания передается и объект контекста безопасности отправителя. Когда рабочий поток принимается за выполнение задания, он пользуется переданным объектом контекста, чтобы гарантировать выполнение всех необходимых проверок полномочий, которыми обладает объект-автор запроса, а не рабочий поток как таковой. В простых ситуациях для достижения подобной цели может вызываться вариант метода checkPermission менеджера безопасности, предусматривающий задание двух аргументов— ссылок на объекты Permission и AccessControlContext. В более общем случае рабочий поток вправе обратиться к одному из методов doPrivileged объекта AccessController (за более подробными сведениями обращайтесь к разделу 18.5.4).

 

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии