gpt4 book ai didi

rest - 通过 restful api 访问文件的权限被拒绝

转载 作者:行者123 更新时间:2023-11-28 22:17:33 25 4
gpt4 key购买 nike

在我的网络应用程序中,我实现了一种在我的 Controller 中下载文件的方法:

@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。 Web 应用程序归用户 risdev 所有。 enter image description here

但是,当我尝试检索文件时,我得到了 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 身份登录服务器时,我可以毫无问题地读取那个确切的文件。 enter image description here

那为什么我没有权限通过api读取呢?实际获取文件的用户是谁?

编辑:我找到了一个与部署我的war的文件夹关联的tomcat进程。它确实是由理应有权访问这些文件的 risdev 运行的。

编辑#2刚刚与在此服务器上安装 tomcat 的管理员确认。他确实使用risdev安装tomcat实例,安装后运行startup.sh。所以 tomcat 肯定由 risdev 拥有和运行。在同一台服务器上,risdev 肯定具有访问该文件夹中文件的读取权限,如命令行(ls 和 less)所确认的那样。只是通过tomcat访问文件时权限被拒绝。

enter image description here

最佳答案

检查以下条件:

  1. Tomcat 必须以 risdev 用户启动才能访问此文件夹。
  2. 文件夹“/rsrch1/rists/moonshot/data/prod/foundation/xml/”及其中的所有文件必须具有 risdev 所有者(或其他人或相应组的读/写权限)。

作为引用,您可以使用以下命令检查正在运行的进程的所有者:

ps -ef 

并使用 grep 缩小结果范围。示例:

ps -ef |grep java

如何更改文件夹及其中所有文件的所有者:

chown -R rizdev /rsrch1/rists/moonshot/data/prod/foundation/xml/

关于rest - 通过 restful api 访问文件的权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39540000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com