在NAS上移动文件时AccessDeniedException

时间:2014-05-28 05:59:49

标签: java tomcat servlets access-denied

我在使用在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);

我已经确认传递给此函数的路径是正确的,文件确实存在。

我不知道此时还有什么可以做的,非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

问题是Apache Tomcat服务正在使用的用户没有访问网络资源的权限。解决方案是更改Apache Tomcat服务用户。默认用户是本地系统。转到Services.msc>将用户更改为Administrator。右键单击Apache Tomcat服务>属性>登录并选择“此帐户:”并填写适用的管理员凭据。

enter image description here