2014-03-20 4 views
0

Я использую загрузку файла Apache Commons для написания короткой jsp-программы, которая позволяет студентам загружать файлы на наш сервер. Сервер представляет собой Linode, работающий с Ubuntu Precise Pangolin. Пожалуйста, простите мою нехватку знаний о администрировании сервера.установить права доступа к файлам с сервлетом

До сих пор мне удалось загрузить файл, только если целевая папка имеет права на 777 (rwx для всех). Мне это кажется неуверенным, поэтому я надеялся, что смогу разместить папку на 755, а затем мгновенно изменить ее на запись (в коде), когда запускается сценарий jsp, и изменить ее сразу после сохранения загруженного файла (также в код).

Я знаю, что файл класса в Java имеет метод setWritable, и я попытался его использовать. Однако этот метод не будет работать, если пользователь не имеет права изменять права доступа к файлам в операционной системе. Таким образом, исключение выдается, поскольку операционная система отказывается от разрешения. Это заставило меня спросить:

Когда запускается сервлет, кто является пользователем? Чьи права проверяются операционной системой?

Я являюсь владельцем файла jsp, который содержит сценарий загрузки файлов, поэтому я бы подумал, что я был пользователем, когда работает сценарий. У меня есть права на изменение прав доступа к файлам. Но сервлет не делает этого. Отсюда моя путаница.

Я ценю вашу помощь.

+0

Будьте предельно осторожны с этим. Убедитесь, что папка не находится под «веб-корнем» - вы не хотите, чтобы ваши ученики могли загружать некоторые неприятные сценарии, а затем запускать ваш сервер. –

+0

@ DavidWallace-- Привет, Дэвид, можете ли вы помочь мне понять, какие права имеет сервлет? Как они определяются? Благодарю. –

+0

@ DavidWallace-- Я согласен быть осторожным. Вот почему я не установил права доступа к файлам 777. Всего есть пять учеников, и у меня будет запись в базе данных с каждой загрузкой. Идея заключается в том, чтобы узнать, как делать веб-программирование, поэтому мне нужно, чтобы они могли загружаться на сервер. –

ответ

2

Когда сервлет запускается, пользователь с точки зрения операционной системы является пользователем, которым работает контейнер сервлетов (Jetty, Tomcat, Glassfish и т. Д.). Именно права этого пользователя проверяются операционной системой. Владелец файла JSP не имеет значения. Ну, если быть точным, JSP-файл должен быть доступен для чтения пользователю, который запускает контейнер сервлета, иначе он не может быть выполнен, но с точки зрения разрешений ОС для действий, определенных этим JSP, единственное, что имеет значение, это пользователь работает в контейнере сервлетов.

+0

Спасибо, Марк, это очень полезно. Я должен был упомянуть, что мы запускаем сервлеты с Tomcat. Чтобы выяснить, кто такой пользователь, я должен посмотреть в файле пользователя Tomcat? Или есть какой-то способ для меня спросить программно «кто пользователь»? –

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