如何解决org.apache.poi.EncryptedDocumentException:需安装JCE无限制权限策略文件
解决Apache POI读取加密Excel时的JCE无限强度策略文件问题
嘿,我碰到过好几次这个棘手的问题,给你几个实用的排查和解决方向:
先搞清楚你的JDK/JRE版本
不同版本的Java对JCE策略的处理完全不一样,这是最容易踩坑的点:
- JDK 8u151及以后版本:默认已经开启了无限强度加密,根本不需要手动替换JCE文件,直接跳过替换步骤去检查配置就行。
- JDK 8u150及更早版本:必须手动替换JCE的两个核心jar文件。
- JDK 9及以上版本:默认自带无限强度加密,但需要修改配置文件手动开启。
确认JCE文件装对了位置
如果是JDK 8早期版本,你下载的local_policy.jar和US_export_policy.jar必须替换到当前运行程序的JRE目录里的lib/security文件夹,别搞错路径:
- 比如用IDEA运行程序,先去
File → Project Structure → SDKs看IDE用的JRE路径,再到对应路径下找jre/lib/security替换文件。 - 替换时一定要关闭所有正在运行的Java程序(IDE、Tomcat之类的),不然替换的文件可能不会生效。
验证JCE是否真的生效
写个几行的小代码验证,比瞎猜靠谱多了:
import javax.crypto.Cipher; public class JceCheck { public static void main(String[] args) { try { int maxKeyLength = Cipher.getMaxAllowedKeyLength("AES"); System.out.println("当前AES最大密钥长度: " + maxKeyLength); } catch (Exception e) { e.printStackTrace(); } } }
如果输出是2147483647,说明无限强度已经生效;如果是128,那你的JCE配置肯定还有问题,回头再检查替换的文件或者配置。
JDK 9+的专属处理方式
如果是JDK 9及以上版本,不用替换任何jar文件,只需要修改JRE目录下的lib/security/java.security文件:
- 找到
crypto.policy=limited这一行,改成crypto.policy=unlimited - 保存文件后重启程序,应该就能解决问题了。
额外排查小技巧
要是上面的步骤都试过还不行,看看是不是依赖冲突?比如你的POI版本太老,和当前JDK不兼容?可以尝试升级POI到最新稳定版试试。
内容的提问来源于stack exchange,提问作者greenHorn
相关产品推荐
相关产品推荐

