来自 java.io.File.createTempFile 的权限被拒绝错误
如果从java.io.File.createTempFile
收到权限被拒绝的错误,请查明是否已在Java进程中设置JVM参数-Djava.io.tmpdir
。 如果未找到java.io.tmpdir
参数,则授予用户对默认操作系统临时目录的访问权限。
描述 description
环境
Adobe Experience Manager (AEM)(所有版本)
问题/症状
报告java.io.IOException: Permission denied
的error.log
中发生错误,栈栈跟踪中包含java.io.File.createTempFile
。
01.06.2017 16:34:02.631 *ERROR* [ qtp1085110594-4453] org.apache.felix.http.jetty Exception while processing request to /system/console/configMgr/com.adobe.cq.experiencelog.impl.ExperienceLogConfigServlet (java.io.IOException: Permission denied)
java.io.IOException: Permission denied
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.createTempFile(File.java:2024)
at org.apache.felix.cm.file.FilePersistenceManager._store(FilePersistenceManager.java:699)
at org.apache.felix.cm.file.FilePersistenceManager.store(FilePersistenceManager.java:660)
at org.apache.felix.cm.impl.CachingPersistenceManagerProxy.store(CachingPersistenceManagerProxy.java:242)
at org.apache.felix.cm.impl.ConfigurationImpl.storeNewConfiguration(ConfigurationImpl.java:462)
at org.apache.felix.cm.impl.ConfigurationImpl.<init>(ConfigurationImpl.java:183)
解决方法 resolution
了解Java进程是否设置了JVM参数-Djava.io.tmpdir
。
在Linux上:
-
运行此命令:
code language-none ps -ef | grep java
-
查看搜索
-Djava.io.tmpdir
的JVM参数
在Windows、Linux或Unix上:
-
转到https://aem-host:aem-port/system/console/jmx/java.lang%3Atype%3DRuntime
-
在页面上搜索
java.io.tmpdir
。 -
将
java.io.tmpdir
的值复制到剪贴板。 -
转到操作系统上的该路径并授予拥有Java进程的用户对该文件夹的完全读/写访问权限。
-
如果未找到
java.io.tmpdir
参数,则授予用户对默认操作系统临时目录的访问权限。- 在Linux和Unix中,此目录默认为
/tmp
。 - 在Windows中,目录在用户的主目录下(例如:
C:\Users\aemuser\AppData\Local\Temp
)。
- 在Linux和Unix中,此目录默认为
原因
拥有 AEM Java 进程的用户没有适当的权限来写入 Java 进程的临时目录。
recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f