Я пишу примеры файлов политики безопасности java с менеджером безопасности. Я использую eclipse и windows 10
Я хочу запустить свой код в Eclipse, чтобы проверить его, поэтому я не имею дело с файлами jar.Мой каталог проекта - E: \ Training-Projects \ JAVA \ ws_security \ 00610_folder_accesscontrol_policy
Я хочу реализовать файл политики безопасности следующим образом: -
1 / Ограничить доступ ко всем файлам, кромедля файлов в 3 каталогах, т. е. если код обращается к файлам из этих 3 каталогов, он должен быть разрешен, но доступ к файлам для любого другого каталога ограничен.2 / Предоставьте все остальные разрешения для базы кода.
То же, что и это
Блокируйте некоторые разрешения и предоставьте другие разрешения в политике безопасности java
длятест, я создал 4 папки в папке Eclipse src: папки / папки 1, папки / папки 2 ... папки / папки 4
Если мой код работает, я должен разрешить доступ к папкам / папкам1, папкам / папкам2, папкам / папкам3и заблокировать доступ к папкам / folder4
Мой код
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 в файле политики, но может быть, что-то еще.
спасибо за вашу помощь