System.getProperty("user.home") возвращает /root при запуске на Tomcat
Я разрабатываю свое приложение в Ubuntu. У меня есть одно веб-приложение Spring MVC Java. В этом у меня есть контроллер. Клиент может загрузить файл (публикация через AngularJS). В контроллере я получаю файл и копирую в определенное место.
Вот мой контроллер
@RequestMapping(value = "/fileUpload", method = RequestMethod.POST)
@ResponseBody
public String UploadFile(HttpServletRequest request,HttpServletResponse response) {
SimpleDateFormat sdf = new SimpleDateFormat("MM_dd_yyyy_HHmmss");
String date = sdf.format(new Date());
String fileLoc = null;
MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request;
Iterator<String> itr = mRequest.getFileNames();
while (itr.hasNext()) {
MultipartFile mFile = mRequest.getFile(itr.next());
String fileName = mFile.getOriginalFilename();
String homePath=System.getProperty("user.home");
String separator=File.separator;
fileLoc = homePath + separator + "myapp" + separator + "file-uploads" +
separator + date + "_" + fileName;
System.out.println(fileLoc);
try {
File file = new File(fileLoc);
// If the directory does not exist, create it
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
FileCopyUtils.copy(mFile.getBytes(), file);
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
catch(Exception e) {
e.printStackTrace();
}
}
return fileLoc;
}
Но когда я развертываю его на сервере Tomcat и запускаю, файл создается в корне.
Когда я печатаю значение fileLoc, он показывает
/root/myapp/file-uploads/01_16_2014_000924_document.jpg
Я добавил основной метод в контроллере.
public static void main(String[] args) {
String homePath=System.getProperty("user.home");
String separator=File.separator;
System.out.println("Home Path: " + homePath);
System.out.println("Separator: " + separator);
}
Когда я запускаю это как Java-приложение, я получаю правильный вывод
Home Path : /home/shiju
Separator : /
Почему он дает рут при работе на Tomcat?
1 ответ
Решение
Если вы выполняете приложение от имени пользователя root, то очевидно, что /root/
будут возвращены в user.home
имущество.