AccessController.doPrivileged - PullRequest
       10

AccessController.doPrivileged

20 голосов
/ 12 мая 2009

Я пытаюсь выяснить, что делает какой-то унаследованный код. Что именно делает эта линия, и зачем мне это нужно?

String lineSeparator = (String) java.security.AccessController.doPrivileged(
       new sun.security.action.GetPropertyAction("line.separator")); 

Я нашел это в реализации средства ведения журнала приложения web / ejb, работающего на Weblogic 8. Насколько мне известно, никаких специальных политик безопасности не разрешено. (Мне не нравится импорт из пакетов sun. *, Поэтому я хочу избавиться от этой строки; -)

1 Ответ

31 голосов
/ 12 мая 2009

Это просто получение системного свойства. Для извлечения системных свойств требуются разрешения, которых у вызывающего кода может не быть. doPrivileged утверждает привилегии вызывающего класса независимо от того, как он был вызван. Ясно, что doPrivileged - это то, с чем вам нужно быть осторожным.

Указанный код является эквивалентом:

String lineSeparator = java.security.AccessController.doPrivileged(
    new java.security.PrivilegedAction<String>() {
        public String run() {
            return System.getProperty("line.separator");
        }
    }
 );

(Разве вы не любите лаконичность синтаксиса Java?)

Без предоставления привилегий, это можно переписать как:

String lineSeparator = System.getProperty("line.separator");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...