Доступ к локальной файловой системе Linux из веб-приложения Java

Мы используем библиотеку Java внутри веб-приложения, которое размещено на сервере Apache. Метод 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;
    }
}

Разрешен ли доступ к локальной файловой системе из веб-приложения? Если да, то есть ли какое-либо разрешение на доступ, которое должно быть установлено?

1 ответ

Решение

Чтобы быстро ответить на ваш вопрос: вы можете получить доступ к файловой системе из веб-приложения, но вам нужно будет проверить свой сервер приложений / веб-контейнер, как настроить SecurityManager (если он установлен).

Тем не менее, ваш метод чтения файла имеет серьезные проблемы, на которые следует обратить внимание:

  1. Не проверять if(!file.exists()) лучше проверить if(!file.isFile()), Первая проверка также возвращает true, если файл является каталогом.

  2. Если файла нет, лучше не возвращать строку, не выдавать исключение, не загружать какую-либо конфигурацию по умолчанию или делать что-то еще полезное.

  3. Ваша логика чтения файла очень плохая. Если функция чтения возвращает различное количество доступных байтов (возможно, чтение разделено на части), вы получите искаженный результат.

  4. Вы не закрываете поток в блоке finally (или не используете попытку с ресурсами, если вы используете Java 7).

  5. Обработка исключений также не хороша. Печать трассировки стека не очень хорошая, регистрация будет лучше. Лучше всего обработать исключение (сгенерировать исключение или переключиться на какую-то конфигурацию по умолчанию, например, когда файла там не было).

Редактировать: если вы хотите получить доступ к файловой системе клиента, то это нельзя сделать из вашего веб-приложения, работающего на сервере напрямую. Это, конечно, должно быть сделано из кода, выполняющегося на клиенте, и вам нужно будет заполнить более подробную информацию о том, что выполняется на стороне клиента, так как "стандартное" веб-приложение будет иметь Javascript и (X)HTML на клиенте не Java.

Другие вопросы по тегам