2

我有一个文件上传 Servlet 并尝试将一些文件存储为:

try{
    File uploadedFile = new File(UPLOAD_DIRECTORY + fileName);
    File uploadedFile = new File("/"+fileName);
    item.write(uploadedFile);
}
catch (Exception e) {
    e.printStackTrace();
}

之后,我收到以下错误:

java.security.AccessControlException: access denied (java.io.FilePermission /untitled.html write)
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
    at java.security.AccessController.checkPermission(AccessController.java:546)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)

我该如何解决?

4

1 回答 1

2

您可以让/您的应用服务器可写(这对我来说似乎不是一个好主意)或将您上传的文件存储在另一个可写位置。

File uploadedFile = new File(UPLOAD_DIRECTORY + fileName);
File uploadedFile = new File("/"+fileName);

您似乎还试图声明uploadedFile两次。从错误来看,看起来要么UPLOAD_DIRECTORY是,/要么您实际上正在使用第二行。也许您只需要提供正确的位置UPLOAD_DIRECTORY

要回答您关于 Java 策略文件的评论问题:

来自java.sun.com 上的安全和权限:

Java 平台安装(系统)有一个策略文件,每个用户有一个可选策略文件。系统策略文件在 {java.home}/lib/security/java.policy 中,用户策略文件在每个用户的主目录中。系统和用户策略文件组合在一起。例如,可能有一个系统策略文件授予系统上所有用户的权限很少,而个别策略文件授予某些用户额外的权限。

有关在策略文件中设置文件系统权限的信息,请参阅文件权限部分。

重申我自己的评论,您还需要注意操作系统中的文件系统权限,其控制取决于您使用的操作系统。

于 2011-03-08T20:13:23.077 回答