溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java文件、文件夾權(quán)限修改的兩種方法

發(fā)布時間:2020-09-20 03:46:09 來源:腳本之家 閱讀:158 作者:娶個昵稱好難 欄目:編程語言

前言

Java 修改文件權(quán)限這個應(yīng)該是老生常談的功能,但是最近發(fā)現(xiàn)以前寫的代碼有一點點安全隱患,所以把代碼改成NIO的方式,下面會介紹2種修改文件,文件夾權(quán)限的方法。

使用File類

這個方式是以前最常見的方式,但是這個方式有點缺點在LINUX或者UNIX系統(tǒng)下,需要顯示的指定權(quán)限為440,770等就顯得不是那么好用了。

File dirFile = new File(dirPath);
dirFile.setReadable(true, false);
dirFile.setExecutable(true, false);
dirFile.setWritable(true, false);

因此我們通常會采用一些workaround的方式修改文件夾權(quán)限,必須我需要在LINUX上設(shè)置權(quán)限為770

Runtime runtime = getRuntime();
String command = "chmod 770 " + dirPath;
try {
  Process process = runtime.exec(command);
  process.waitFor();
  int existValue = process.exitValue();
  if(existValue != 0){
    logger.log(Level.SEVERE, "Change file permission failed.");
    }
   } catch (Exception e) {
    logger.log(Level.SEVERE, "Command execute failed.", e);
   }

這種方式會有一個問題,當(dāng)dirPath中包含空格或者分號的時候,不僅僅對功能有影響,對安全也是有隱患的。

情況1: dirPath = /home/a aa.txt

在LINUX系統(tǒng)中執(zhí)行的命令是 chmod 770 /home/a aa.txt , 系統(tǒng)會認(rèn)為修改/home/a 和aa.txt 的文件權(quán)限為770,修改文件權(quán)限失敗

情況2: 當(dāng)dirPath = /home/aaa.txt;rm test.txt

這時在LINUX系統(tǒng)中會執(zhí)行2條指令:

chmod 770 /home/omc/aaa.txt
rm test.txt

這時就會出現(xiàn)安全隱患。

NIO方式

private void changeFolderPermission(File dirFile) throws IOException {
  Set<PosixFilePermission> perms = new HashSet<PosixFilePermission>();
  perms.add(PosixFilePermission.OWNER_READ);
  perms.add(PosixFilePermission.OWNER_WRITE);
  perms.add(PosixFilePermission.OWNER_EXECUTE);
  perms.add(PosixFilePermission.GROUP_READ);
  perms.add(PosixFilePermission.GROUP_WRITE);
  perms.add(PosixFilePermission.GROUP_EXECUTE);
  try {
    Path path = Paths.get(dirFile.getAbsolutePath());
    Files.setPosixFilePermissions(path, perms);
  } catch (Exception e) {
    logger.log(Level.SEVERE, "Change folder " + dirFile.getAbsolutePath() + " permission failed.", e);
    }
  }

從API 查詢知道,NIO的這種方式原生支持LINUX和UNIX低層系統(tǒng),但測試發(fā)現(xiàn)在Windows系統(tǒng)下面不區(qū)分文件所有者和其它似乎沒有效果,這個和實用File是一致的。從底層代碼發(fā)現(xiàn),還是使用的File類

另外可能會拋出UnsupportedOperationException IOException SecurityException

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI