Доступ к локальной файловой системе 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 (если он установлен).
Тем не менее, ваш метод чтения файла имеет серьезные проблемы, на которые следует обратить внимание:
Не проверять
if(!file.exists())
лучше проверитьif(!file.isFile())
, Первая проверка также возвращает true, если файл является каталогом.Если файла нет, лучше не возвращать строку, не выдавать исключение, не загружать какую-либо конфигурацию по умолчанию или делать что-то еще полезное.
Ваша логика чтения файла очень плохая. Если функция чтения возвращает различное количество доступных байтов (возможно, чтение разделено на части), вы получите искаженный результат.
Вы не закрываете поток в блоке finally (или не используете попытку с ресурсами, если вы используете Java 7).
Обработка исключений также не хороша. Печать трассировки стека не очень хорошая, регистрация будет лучше. Лучше всего обработать исключение (сгенерировать исключение или переключиться на какую-то конфигурацию по умолчанию, например, когда файла там не было).
Редактировать: если вы хотите получить доступ к файловой системе клиента, то это нельзя сделать из вашего веб-приложения, работающего на сервере напрямую. Это, конечно, должно быть сделано из кода, выполняющегося на клиенте, и вам нужно будет заполнить более подробную информацию о том, что выполняется на стороне клиента, так как "стандартное" веб-приложение будет иметь Javascript и (X)HTML на клиенте не Java.