Подтвердить что ты не робот

AccessController.doPrivileged

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

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

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

4b9b3361

Ответ 1

Он просто получает системное свойство. Для получения свойств системы требуются разрешения, которые код вызова может не иметь. 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");