2013-11-14 3 views
2

мы используем библиотеку Java в веб-приложении, которое организовано в апача методе server.ReadConfFile в библиотеке возвращает файл не найден метод error.The следующимДоступ к Линукс локальной файловой системе из Java веб-приложения

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; 
    } 
} 

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

+0

Предполагаю, что 'apache' вы имеете в виду' apache tomcat'? Какой пользователь это работает? Имеет ли этот пользователь права на чтение в указанном вами местоположении? Вы работаете с «SecurityManager»? –

+0

Вы хотите получить доступ к файловой системе сервера tomcat или хотите получить доступ к файловой системе пользователя? Последнее невозможно (я думаю). – mvieghofer

ответ

9

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

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

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

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

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

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

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

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

+0

Очень, очень здравый совет. +1 –

+0

Спасибо за ваш ответ Matthias.I проверю любые конфигурации, которые должны быть выполнены с помощью диспетчера безопасности. Это образец метода, который я написал для проблемы, и это не будет с производственным кодом (где мы закроем все потоки и журналы). Ваш ответ напоминает ваше совершенство и его великое. – dasumohan89

+0

Хороший ответ. Не могли бы вы оценить «3.» немного больше и предложить альтернативную реализацию? –

Смежные вопросы