Страницы

Поиск по вопросам

суббота, 8 февраля 2020 г.

В чем смысл класса Permission в java

#java #безопасность


public class Worker {

private static String path;

public static void main(String[] argv) throws Exception {
    path = "C:\\glassfish-4.1.1\\glassfish4\\README.txt";
    Permission permission = new FilePermission(path, "read");
    try {
        AccessController.checkPermission(permission);
    }catch (Exception e){
        System.out.printf(String.valueOf(e));
    }
    System.out.println(new FileInputStream(new File(path)).read());
}
}


Этот класс вернет что-то похожее на 


  java.security.AccessControlException: access denied ("java.io.FilePermission" "C:\glassfish-4.1.1\glassfish4\README.txt"
"read")84


Почему удалось прочитать из файла, когда прав на это нет!?
    


Ответы

Ответ 1



Для ограничения доступа к файлам в файловой системе используются методы класса File setExecutable() setReadable() setWritable() Пример, который приводите вы, относится к настройке SecurityManager. Это механизм который позволяет ограничивать Java приложению доступ к определенным ресурсам (не только файлам). В качестве примера, возьмем апплеты - SecurityManager не дает им доступа к файловой системе. Почувствуйте разницу - SecurityManager не модифицирует права файла в файловой системе, а запрещает Java приложению совершать с ним определенные действия. В этом и смысл класса Permission, и наследуемых от него классов - они описывают эти действия. Файл у вас прочитался потому что в JDK, по умолчанию, SecurityManager отключен. Проверить это можно таким образом: System.out.println(System.getSecurityManager()); // null, если отключен Запустите приложение с ключом VM -Djava.security.manager и файл у вас прочитать не получится, до тех пор пока не будет настроена соответствующая security policy. Дефолтные лежат в $JAVA_HOME/lib/security. public static void main(String[] args) throws FileNotFoundException, IOException { System.out.println(System.getSecurityManager()); String path = "D:/test/file.txt"; check(path, "read,write"); System.out.println(new FileInputStream(new File(path)).read()); } static void check(String path, String actions) { FilePermission perm = new FilePermission(path, actions); try { AccessController.checkPermission(perm); } catch (Exception e) { System.out.println(e); } } Подробнее смотрите в официальной документации.

Комментариев нет:

Отправить комментарий