訪問文件在我的web應用程序,我實現了一個方法來下載文件在我的控制器:權限被拒絕通過RESTful的API
@RequestMapping(
value = "/ristore/foundation/xml/{filename}",
method = RequestMethod.GET,
produces = "application/xml")
public ResponseEntity<byte[]> downloadXMLFile(@PathVariable String filename) throws IOException {
FileSystemResource xmlFile = new FileSystemResource("/rsrch1/rists/moonshot/data/prod/foundation/xml/" + filename + ".xml");
byte [] content = new byte[(int)xmlFile.contentLength()];
IOUtils.read(xmlFile.getInputStream(), content);
return ResponseEntity.ok()
.contentType(MediaType.parseMediaType("application/octet-stream"))
.contentLength(xmlFile.contentLength())
.body(content);
}
我硬編碼的路徑,在方法的文件。它是運行Tomcat實例的服務器上所有文件所在目錄的路徑。
我在tomcat服務器上部署了war。該網絡應用程序由用戶risdev
擁有。
然而,當我試圖找回我得到了500。catalina.out的文件,它顯示的錯誤如下:
[/ristore/foundation/xml/TRF174146_09092016230414] due to exception [/rsrch1/rists/moonshot/data/prod/foundation/xml/TRF174146_09092016230414.xml (Permission denied)]
的服務器授予risdev
訪問該文件夾管理。當我以risdev
的身份登錄服務器時,我可以毫無問題地讀取確切的文件。
那麼爲什麼我沒有權限通過API讀取它?誰是真正獲取文件的用戶?
編輯: 我發現一個tomcat進程,與我的戰爭部署的文件夾相關聯。它確實由誰應該擁有文件權限的risdev運行。
編輯#2 剛剛與在此服務器上安裝tomcat的管理員確認。他確實使用risdev
來安裝tomcat實例,並在安裝後運行startup.sh
。所以tomcat肯定是由risdev
擁有和運行的。在同一臺服務器上,risdev
通過命令行(ls和less)確認已明確具有訪問該文件夾中文件的權限。只是在通過tomcat訪問文件時權限被拒絕。
我重視Tomcat進程的屏幕截圖,這是否意味着Tomcat是被'risdev'運行? – ddd
是的。看來tomcat實例運行正確的用戶。讓我檢查還有什麼可能是錯的。 –
我仔細閱讀,我看不到你已經確保你下載的文件有rizdev所有者。我已經更新了答案。 –