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");