0

我有一个可以工作的文件上传 JSP,但现在不行。在我们更换服务器并更新软件(tomcat5 到 tomcat6 等)后,它现在无法正常工作。这是代码:

FileOutputStream fileOut = new FileOutputStream(savePathFile);
fileOut.write(dataBytes, startPos, (endPos - startPos));

该文件是使用第一行 new FileOutputStream(…) (filesize is 0) 创建的,但第二行 .write 会引发异常。该文件的所有者/组是 tomcat/tomcat。

所以看来tomcat应该有正确的权限。
我还查看了 tomcat java 权限策略(catalina.policy),看看是否有正确的 FilePermissions。他们不在那里,所以我们补充说:

grant codeBase "file:${catalina.home}/webapps/myapp/-" {
permission java.io.FilePermission "/var/lib/tomcat6/webapps/myapp/photographs", "read, write";
}

但这并没有什么不同。然后我被告知没有在启用安全选项的情况下启动tomcat。

tomcat6.conf:SECURITY_MANAGER="false"

我不确定我还应该去哪里看。我有几个明确的问题:

如何查看用户 tomcat 在此目录上实际拥有的权限 (rwx)?

如何验证tomcat是否在启用安全选项的情况下运行?

为了获得许可,它应该是:

grant codeBase "file:${catalina.home}/webapps/myapp/admin/-" {

因为upload.jsp 文件在webapps/myapp/admin 目录中?

谢谢你的帮助,弗兰克

4

2 回答 2

0

这不会回答你的问题,但指向一个完全不同的方向(架构方面):

将文件直接上传到您的 Web 应用程序是一种不好的做法。有几个原因:

  • 您的应用程序可能不会“爆炸”,因此纯粹存在于尚未解压缩到文件系统的 WAR 文件中。因此没有目录可以写入
  • 您将需要检查漏洞。否则很容易将恶意文件上传到您的服务器:想象一个administration.jsp要上传的文件。Tomcat 将愉快地在服务器端编译/执行它(这可能正是您所追求的,但“照片”文件夹表明它是应该存储在其他地方并由下载 servlet 提供的图像资源 - 您仍然可以使路径看起来好像它被用作静态资源
  • 在更新时,您必须记住您的 web 应用程序可能包含与您部署时不同的内容——例如所有上传的资源。如果其他人进行更新以排除故障(“我知道如何升级 tomcat 应用程序 - 可能出现什么问题?”),他们可能会无意中删除所有上传的资源。

通过这些更改,我建议配置一个绝对路径以配置为 tomcat 可写。

回到您最初的问题,您可能想要检查您的新 tomcat 是否确实以对您的目录具有写入权限的用户 tomcat 运行。还要检查文件系统的容量、用户的配额以及目录的所有者和权限

于 2013-01-11T13:53:52.173 回答
0

我解决了这个问题——它与解析多部分数据的方式有关。我不确定为什么新服务器会改变,也许是字符编码,但我改变了我的代码并且它正在工作。谢谢大家的评论。

于 2013-01-12T17:14:16.470 回答