Файл политики Java и менеджер безопасности в Eclipse

Я пишу примеры файлов политики безопасности Java с помощью менеджера безопасности. Я использую Eclipse и Windows 10.

Я хочу запустить свой код в Eclipse, чтобы проверить его, поэтому я не имею дело с файлами JAR. Мой каталог проектов - E:\Training-Projects\JAVA\ws_security\00610_folder_accesscontrol_policy

Я хочу реализовать файл политики безопасности следующим образом:

1/ Ограничить доступ ко всем файлам, кроме файлов в 3 каталогах, т. Е. Если код получает доступ к файлам из этих 3 каталогов, он должен быть разрешен, но доступ к файлам для любого другого каталога ограничен. 2/ Предоставить все остальные разрешения для базы кода.

Так же, как это

Блокируйте некоторые разрешения и предоставьте другие разрешения в политике безопасности Java.

чтобы проверить, я создал 4 папки в Eclipse src folder folder /folder1, folder / folder2...folder /folder4

Если мой код работает, я должен разрешить доступ к папкам / папкам1, папкам / папкам2, папкам / папкам3 и заблокировать доступ к папкам / папкам4

Мой код

    package code.secure;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class SecureFolderAccess {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        // Get project codeBase
        System.out.println("***");
        System.out.println("codeBase");
        System.out.println("Present Project Directory : "+ System.getProperty("user.dir"));
        System.out.println("***");

        // define 4 paths to 4 files        
//      Path file1 = Paths.get("src","access.policy");
        Path file1 = Paths.get("src/folders/folder1/", "file1.txt");
        Path file2 = Paths.get("src/folders/folder2/", "file2.txt");
        Path file3 = Paths.get("src/folders/folder3/", "file3.txt");
        Path file4 = Paths.get("src/folders/folder4/", "file4.txt");


        System.out.println(file1.toAbsolutePath());


        //      E:\\Training-Projects\\JAVA\\ws_security\\00610_folder_accesscontrol_policy\\src\\access.policy

        // Enable the security manager
        try {

            System.out.println("***");
            System.out.println("Setting policy file");
            System.out.println("Setting Security manager");
            System.out.println("***");

            // Must place any System.setProperty(...)
            // before SecurityManager securityManager = new SecurityManager();
//          System.setProperty("java.security.policy", "file:/E:\\Training-Projects\\JAVA\\ws_security\\00610_folder_accesscontrol_policy\\src\\access.policy");
            System.setProperty("java.security.policy", "file:///E:/Training-Projects/JAVA/ws_security/00610_folder_accesscontrol_policy/src/access.policy");
            SecurityManager securityManager = new SecurityManager();

            System.setSecurityManager(securityManager);
        } catch (SecurityException se) {

            // SecurityManager already set
        }


        // Create 4 files
        // in 4 different folders
        try {
            OutputStream os1 = new FileOutputStream(file1.toFile());
            OutputStream os2 = new FileOutputStream(file2.toFile());
            OutputStream os3 = new FileOutputStream(file3.toFile());
            OutputStream os4 = new FileOutputStream(file4.toFile());


             os1 = new FileOutputStream(file1.toFile());
             os2 = new FileOutputStream(file2.toFile());
             os3 = new FileOutputStream(file3.toFile());
             os4 = new FileOutputStream(file4.toFile());

            os1.write("Hello file1".getBytes()); ;
            os2.write("Hello file2".getBytes()); ;
            os3.write("Hello file3".getBytes()); ;
            os4.write("Hello file4".getBytes()); ;

        } catch (IOException e) {
          System.err.println(e);
        }

        readFile(file1);
        readFile(file2);
        readFile(file3);
        readFile(file4);


    }

      public static void readFile(Path path) {

            try {

              Files.lines(path)
//                 .filter(line -> line.startsWith("Love"))
                  .forEach(System.out::println);//print each line

            } catch (IOException ex) {
              ex.printStackTrace();//handle exception here
            }
      }


}

Мой файл политики также находится в папке src, вот он

grant codeBase "file:/E:/Training-Projects/JAVA/ws_security/00610_folder_accesscontrol_policy/-" {
    permission java.io.FilePermission "E:\Training-Projects\JAVA\ws_security\00610_folder_accesscontrol_policy\src\folders\folder1/*", "read, write"; 
    permission java.io.FilePermission "E:\Training-Projects\JAVA\ws_security\00610_folder_accesscontrol_policy\src\folders\folder2/*", "read, write"; 
    permission java.io.FilePermission "E:\Training-Projects\JAVA\ws_security\00610_folder_accesscontrol_policy\src\folders\folder3/*", "read, write"; 
};

Это не работает, как ожидалось, все папки заблокированы.

Я подозреваю, что проблема заключается в значении codeBase в файле политики, но может быть, что-то еще.

Спасибо за вашу помощь

0 ответов

Другие вопросы по тегам