AccessController.doPrivileged

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

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

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

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");
Другие вопросы по тегам