JSP无法写入文件

时间:2013-01-10 13:20:13

标签: jsp tomcat file-permissions

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

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

使用第一行创建文件,新FileOutputStream(...),(filesize为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目录中?

感谢您的帮助, 弗兰克

2 个答案:

答案 0 :(得分:0)

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

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

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

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

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

答案 1 :(得分:0)

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