我可以在不使用Java中的File对象的情况下将文件设置为只读吗?

时间:2015-07-30 21:21:56

标签: java file security metadata inputstream

我正在使用一个系统,我们有内置功能,可以通过Apache Commons Imaging library将元数据标签添加到Jpeg图像。该库允许直接通过InputStream修改元数据。然后,安装在我们最终用户的计算机上的Symantec DLP读取此元数据,以防止他们使用标记文件(复制到闪存,其他存储,电子邮件等)进行可疑操作。问题是用户仍然可以在事后修改标签,因为文件是可写的,几乎使安全工作无效。

我正在寻找一种方法,通过可以环绕InputStream的东西来修改数据,从而以类似的方式将文件的元数据编写为只读。

Java File对象有一个名为setReadOnly()的内置方法,可以在理论上使用,但问题是我永远无法直接创建File对象。我们从客户端接收InputStream,使用其他库对其进行修改,并在出于安全原因将其写入存储之前对其进行加密。如果我将标记添加到加密文件中,它将在解密时删除。 Apache Commons Imaging支持大量元数据标记类型,但我在查找支持的任何R / W标记方面一直不成功。

是否有人知道如何使用核心Java,Apache Commons Imaging或有用的第三方库直接通过InputStream或某些派生对象将文件设置为永久只读?

1 个答案:

答案 0 :(得分:0)

<击> 只需使用ProcessBuilder chmod文件,即可轻松完成此操作。

类似的东西:

String fileLoc = "/var/tmp/myImage.jpg";
String[] cmd = {"chmod", "0444", fileLoc};
ProcessBuilder pb = new ProcessBuilder(cmd);
Process process = pb.start();
int error = process.waitFor();
if (error != 0){
    //non 0 means something bad happend
} 

<击> 修改 如果您不能将其作为文件访问,并且只将其作为流进行访问,则不能将其设置为只读文件系统属性,文件中的任何内容实际上都不会更改。