一尘不染

从Java Web应用程序访问Linux本地文件系统

linux

我们在apache服务器中托管的Web应用程序中使用Java库。库中的ReadConfFile方法返回文件未找到错误。方法如下

public byte[] ReadConfFile()
{
    try
    {
        File file = new File("/home/product/api/conf.txt");
        if(!file.exists())
            return "file not found".getBytes();
        byte[] buf = new byte[(int) file.length()];

        FileInputStream fis = new FileInputStream(file);
        fis.read(buf);
        return buf;
    } catch (IOException e)
    {
        e.printStackTrace();
        return null;
    }
}

是否允许从Web应用程序访问本地文件系统?如果是,那么是否需要设置任何访问权限?


阅读 746

收藏
2020-06-07

共1个答案

一尘不染

要快速回答您的问题:您可以从Web应用程序访问文件系统,但是必须检查应用程序服务器/ Web容器上如何配置SecurityManager(如果已安装)。

但是,您读取文件的方法存在严重的问题,应该解决:

  1. 不要检查if(!file.exists())更好的检查if(!file.isFile())。如果文件是目录,则第一次检查也返回true。

  2. 如果没有文件,最好不要返回字符串,抛出异常或加载一些默认配置或执行其他有用的操作。

  3. 您读取文件的逻辑非常糟糕。如果读取函数返回不同数量的可用字节(也许读取是分块的),则会得到损坏的结果。

  4. 您不要在finally块中关闭流(或者,如果您使用的是Java 7,请尝试使用资源)。

  5. 异常处理也不是很好。打印stacktrace不好,记录它会更好。最好处理异常(引发异常,或切换到某些默认配置,例如当文件不存在时)。

编辑:如果要访问客户端的文件系统,则无法从直接在服务器上运行的Web应用程序完成此操作。当然,这必须从客户端上运行的代码完成,并且您必须填写有关客户端上运行的内容的更多详细信息,因为“标准”
Web应用程序在客户端上将具有Javascript和(X)HTML ,而不是Java。

2020-06-07