Eclipse 2022-06退出时java.security.AccessControlException写入权限问题求助
Eclipse 2022-06 退出工作区时
java.security.AccessControlException权限问题解决 问题背景
升级Eclipse至2022-06版本后,在Windows 10、Java 17.0.3(Azul Systems, Inc.)环境下,修改系统属性或项目内容后退出新建工作区时,弹出错误提示:
Problems occurred while trying to save the state of the workbench.
具体异常为java.security.AccessControlException,提示拒绝写入state.dat或.markers文件,异常栈信息如下:
at java.base/java.security.AccessControlContext.checkPermission(AccessControlContext.java:485) at java.base/java.security.AccessController.checkPermission(AccessController.java:1068) at java.base/java.lang.SecurityManager.checkPermission(SecurityManager.java:416) at java.base/java.lang.SecurityManager.checkWrite(SecurityManager.java:847) at ro.sync.security.manager.SandboxSecurityManager.checkWrite(SandboxSecurityManager.java:188) at java.base/java.io.FileOutputStream.(FileOutputStream.java:223) at java.base/java.io.FileOutputStream.(FileOutputStream.java:184) at org.eclipse.jdt.internal.core.JavaModelManager.createOutputStream(JavaModelManager.java:4387) at org.eclipse.jdt.internal.core.JavaModelManager.saveBuiltState(JavaModelManager.java:4341) at org.eclipse.jdt.internal.core.JavaModelManager.saveState(JavaModelManager.java:4323) at org.eclipse.jdt.internal.core.JavaModelManager.lambda$1(JavaModelManager.java:4699) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.Nodes$CollectorTask.doLeaf(Nodes.java:2183) at java.base/java.util.stream.Nodes$CollectorTask$OfRef.doLeaf(Nodes.java:2193) at java.base/java.util.stream.AbstractTask.compute(AbstractTask.java:327) at java.base/java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:754) at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) at java.base/java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:686) at java.base/java.util.stream.Nodes.collect(Nodes.java:328) at java.base/java.util.stream.ReferencePipeline.evaluateToNode(ReferencePipeline.java:111) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:570) at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) at org.eclipse.jdt.internal.core.JavaModelManager.lambda$0(JavaModelManager.java:4704) at java.base/java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1428) at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182) at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655) at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622) at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
已尝试在java.policy文件中添加项目路径写入权限,但问题未解决。
已知情况
这是Eclipse 2022-06版本与第三方安全管理器(异常栈中的ro.sync.security.manager.SandboxSecurityManager属于Oxygen XML Editor相关组件)的兼容性问题,第三方安全管理器限制了Eclipse JDT组件写入工作区状态文件的权限,并非Eclipse原生组件的问题。
解决建议
- 禁用第三方安全管理器相关插件:若安装了Oxygen XML Editor插件,暂时禁用该插件,重启Eclipse后验证问题是否消失。
- 修改Eclipse启动参数:在Eclipse安装目录下的
eclipse.ini文件中添加以下参数,绕过安全管理器限制:-Djava.security.manager=allow --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED - 调整工作区目录权限:确保当前Windows用户对工作区文件夹拥有完全控制权限,右键工作区文件夹 → 属性 → 安全 → 编辑,给当前用户添加“完全控制”权限。
- 升级Eclipse版本:该兼容性问题在Eclipse 2022-09及后续版本中已修复,升级到最新稳定版可彻底解决问题。
- 重新配置
java.policy权限:之前的配置可能未覆盖正确路径,需添加工作区.metadata目录的写入权限,在java.policy文件中添加:
替换permission java.io.FilePermission "${user.home}/path/to/your/workspace/.metadata/-", "write";${user.home}/path/to/your/workspace为实际工作区路径,路径使用正斜杠或转义反斜杠。
内容的提问来源于stack exchange,提问作者Thomas Kernstock
相关产品推荐
相关产品推荐

