我有一个文件上传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)
我该如何解决?
答案 0 :(得分:2)
您可以让您的应用服务器/
可写(这对我来说似乎不是一个好主意)或将您上传的文件存储在另一个可写位置。
File uploadedFile = new File(UPLOAD_DIRECTORY + fileName);
File uploadedFile = new File("/"+fileName);
您似乎也试图两次声明uploadedFile
。从错误中看,UPLOAD_DIRECTORY
似乎是/
,或者您实际上正在使用第二行。也许您只需要在UPLOAD_DIRECTORY
中提供正确的位置?
回答有关Java政策文件的评论问题:
来自java.sun.com上的Security and Permissions:
Java有一个策略文件 平台安装(系统)和 每个用户的可选策略文件。 系统策略文件位于 {java.home} /lib/security/java.policy, 并且每个用户策略文件都在其中 用户的主目录。系统和 用户策略文件组合在一起。因此对于 例如,可能存在系统策略 授予权限很少的文件 对系统上的所有用户,以及 个别政策文件授予 对某些人的额外权限 用户。
有关在策略文件中设置文件系统权限的信息,请参阅File Permission部分。
重申我自己的评论,你还要注意操作系统中的文件系统权限,其控制权取决于你正在使用的操作系统。