我在解决运行在 Tomcat 6.0 上的 Java Servlet 的权限问题时遇到了问题
当我尝试操作存储在网络共享上的文件时遇到 AccessDeniedException。
这是堆栈跟踪:
java.nio.file.AccessDeniedException: \\192.168.1.150\san\input\picture.jpg -> \\192.168.1.150\san\output\picture.jpg
at sun.nio.fs.WindowsException.translateToIOException(Unknown Source)
at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
at sun.nio.fs.WindowsFileCopy.move(Unknown Source)
at sun.nio.fs.WindowsFileSystemProvider.move(Unknown Source)
at java.nio.file.Files.move(Unknown Source)
at com.package.Task.MoveFile.exec(MoveFile.java:33)
at com.package.Task.PostProcess.doPost(Download.java:101)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:877)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:594)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1675)
at java.lang.Thread.run(Unknown Source)
在研究了 StackOverflow 上的帖子后,我无法找到适合我的情况的解决方案。
一些注意事项:
我只在我部署的应用程序(Tomcat 6 服务器的 webapps 目录中的 war 文件)中遇到这个问题。
在 Eclipse Tomcat 服务器中运行应用程序时没有访问问题。
网络共享的 Windows 权限显示正确(用户 = 每个人,权限 = 完全控制)。
文件位于网络共享上,物理上驻留在 SAN 上。
在独立 Java 应用程序上操作相同文件时没有权限问题。
引发此异常的代码行之一是:
Files.move(source, target, StandardCopyOption.ATOMIC_MOVE);
我已确认传递给此函数的路径是正确的并且文件确实存在。
我不确定此时还能做什么,我们将不胜感激任何帮助。
最佳答案
问题是 Apache Tomcat 服务正在使用的用户没有访问网络资源的权限。解决方案是更改 Apache Tomcat 服务用户。默认用户是本地系统。通过转到 Services.msc > 右键单击 Apache Tomcat 服务 > 属性 > 登录并选择“此帐户:”并填写适用的管理员凭据,将用户更改为管理员。
关于java - 在 NAS 上移动文件时出现 AccessDeniedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23903837/