java - 在 NAS 上移动文件时出现 AccessDeniedException

标签 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);

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

我不确定此时还能做什么,我们将不胜感激任何帮助。

最佳答案

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

enter image description here

关于java - 在 NAS 上移动文件时出现 AccessDeniedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23903837/

相关文章:

javascript - Angular 6 Http 请求因授权 header 而失败

java - 过滤 servlet 导致图像不显示在客户端上

java - Servlet文件上传

mysql - 如何在日期对象的值中添加 1 年?

Java,如何从抽象类继承方法

java - 如果项目没有入口点,如何创建 war 文件?

Java 拦截对接口(interface)方法的调用

java - Java 中的查询生成器

java - 为什么 Eclipse Europa 经常崩溃?

jsp - 在 JSP 中下载文件