Salve,
Ho qualche problema a settare i permessi di lettura/scrittura su dei file/folder che il mio applicativo crea. Sostanzialmente vorrei che file e folder che creo abbiano i permessi 0777. L'applicativo gira dentro tomcat, e tomcat gira come utente root, e a me sta bene così (tant'è che i file vengono creati come utente root, e sta bene cosi come avviene). il problema è che non riesco a settare corretamente i permessi.
ambiente di produzione: linux
ambiente di sviluppo: dipende, diciamo windows
All'inizio ho provato questo codice:
codice:
File f = new File("/path/to/folder");
folder.mkdirs();
f.setReadable(true, false);
f.setWritable(true, false);
f.setExecutable(true, false);
però la cartella viene creata con i permessi del tipo:
drwxrwx--- 3 root root 4096 Jul 27 18:39 miacartella
ovvero ad "others" non viene dato alcun permesso.. cosa che mi pare sia normale leggendo la documentazione ma ora non l'ho davanti gli occhi quindi non ricordo...ma ciò è male per il mio scenario. Allora ho aggiunto questo pezzo di codice:
codice:
if (!SystemUtils.IS_OS_WINDOWS) {
//using PosixFilePermission to set file permissions 777
Set<PosixFilePermission> perms = new HashSet<>();
//add owners permission
perms.add(PosixFilePermission.OWNER_READ);
perms.add(PosixFilePermission.OWNER_WRITE);
perms.add(PosixFilePermission.OWNER_EXECUTE);
//add group permissions
perms.add(PosixFilePermission.GROUP_READ);
perms.add(PosixFilePermission.GROUP_WRITE);
perms.add(PosixFilePermission.GROUP_EXECUTE);
//add others permissions
perms.add(PosixFilePermission.OTHERS_READ);
perms.add(PosixFilePermission.OTHERS_WRITE);
perms.add(PosixFilePermission.OTHERS_EXECUTE);
try {
Files.setPosixFilePermissions(f.toPath(), perms);
} catch (IOException ex) {
//do nothing
}
}
ma la situazione non cambia di una virgola. che poi non capisco perchè la "root" viene creata con i permessi sbagliati mentre poi internamente i permessi vengono settati correttamente, ma per via dei permessi della root poi gli altri programmi non riescono a leggerli i file creati. Eppure il codice è sempre lo stesso.
Cmq volevo un feedback sul codice, se insomma ho scritto un sacco di fregnacce oppure se più o meno il codice quello dovrebbe essere.
Grazie