0

0

Java中的AccessControlException怎么排查_安全策略策略文件配置

P粉602998670

P粉602998670

发布时间:2026-03-01 10:39:30

|

273人浏览过

|

来源于php中文网

原创

accesscontrolexception 是 securitymanager 明确拒绝敏感操作所致,需先确认 jvm 是否启用安全管理器(system.getsecuritymanager() != null),再通过堆栈定位被拦截的权限类型(如 filepermission)及触发代码,严格匹配策略文件中 codebase 路径、权限 target/actions 格式;jdk 17+ 已移除 securitymanager 原生支持,相关配置无效。

java中的accesscontrolexception怎么排查_安全策略策略文件配置

AccessControlException 报错时先看堆栈里 checkPermission 调用链

这个异常不是运行时随便抛的,而是 SecurityManager 在执行 checkPermission 时明确拒绝了某次敏感操作。关键不是“为什么没权限”,而是“谁在检查什么权限”。堆栈里往上找,一定能看到类似 FilePermissionSocketPermissionRuntimePermission 的字样——这才是真实被拦的操作类型。

常见错误现象:AccessControlException: access denied ("java.io.FilePermission" "/tmp/test.txt" "read"),说明代码试图读文件,但策略没授权;又或者 access denied ("java.lang.RuntimePermission" "createClassLoader"),说明用了自定义类加载器但没开权限。

  • 别急着改 java.policy,先确认当前 JVM 是否真启用了安全管理器(System.getSecurityManager() != null
  • 检查堆栈最顶上几行,定位是哪行业务代码触发的检查(比如 new FileInputStream(...)Class.forName(...)
  • 注意 JDK 9+ 默认不启用 SecurityManager,如果看到这个异常,大概率是你显式加了 -Djava.security.manager 或代码里调了 System.setSecurityManager(...)

策略文件里 grant 块的 codeBase 必须精确匹配 JAR 或 classpath 路径

codeBase 不是模糊匹配,也不是按包名生效,它匹配的是类实际加载来源的 URL。写错一个斜杠、少一个 file: 前缀、路径里用了相对路径但 JVM 当前目录变了,都会导致整个 grant 块失效。

使用场景:你打包了一个 app.jar,里面有个类要读配置文件,你在 my.policy 里写了授权,但始终不生效。

立即学习Java免费学习笔记(深入)”;

Genspark
Genspark

Genspark 是一款创新的 AI 搜索引擎,致力于提供比传统搜索引擎更高效、准确和无偏见的信息获取方式。

下载
  • codeBase "file:/opt/myapp/app.jar" —— 正确,绝对路径,末尾无斜杠
  • codeBase "file:/opt/myapp/" —— 错误,这是目录,JAR 文件不会被识别为 codeBase 源
  • codeBase "file:app.jar" —— 错误,相对路径依赖启动目录,极不可靠
  • 如果类来自模块路径(JDK 9+),codeBase 对模块无效,得用 module 语法(但实际极少用)

权限项里的 targetactions 大小写、空格、引号都必须严格符合文档定义

FilePermissiontarget 是路径字符串,actions 是逗号分隔的小写动作(如 "read,write"),多一个空格或写成 "Read" 就完全不匹配。Java 权限系统不做任何 normalize 或容错。

性能影响:每次权限检查都要遍历所有 grant 块,再逐个比对 codeBase 和权限项,所以策略文件别堆几十个重复块。

  • permission java.io.FilePermission "/tmp/-", "read,write"; —— 正确,- 表示子路径递归
  • permission java.io.FilePermission "/tmp/", "read, write"; —— 错误,actions 里多了空格
  • permission java.lang.RuntimePermission "setSecurityManager"; —— 正确,这个权限没有 actions 字段
  • permission java.net.SocketPermission "example.com:80", "connect"; —— 注意主机名和端口之间是英文冒号,不是中文或全角

JDK 17+ 环境下 SecurityManager 已被彻底移除,硬配策略文件也没用

从 JDK 17 开始,SecurityManager 类还在,但所有方法都直接抛 UnsupportedOperationException。如果你在 JDK 17+ 上看到 AccessControlException,只有一种可能:你的应用自己实现了 SecurityManager 子类并主动调用 checkPermission,或者用了老版本框架(如早期 Tomcat)自带的定制安全管理器。

兼容性影响:不要假设 -Djava.security.policy=my.policy 在新 JDK 里还能起作用。JVM 启动时会静默忽略该参数,也不会报错。

  • 查 JDK 版本:java -version 输出含 17 或更高,基本可排除原生策略机制
  • 运行时验证:System.getSecurityManager() 返回 null 或抛 UnsupportedOperationException,就说明原生机制已失效
  • 真正需要沙箱隔离的场景,现在应转向容器、模块系统(java --module-path)、或 SecurityManager 替代方案(如 Java Agent + 字节码插桩)

最容易被忽略的一点:很多团队在升级 JDK 后,还留着旧的 java.policy 文件和启动参数,以为它还在生效,结果权限问题排查方向完全跑偏。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
如何配置Tomcat环境变量
如何配置Tomcat环境变量

配置Tomcat环境变量需要在系统中添加CATALINA_HOME变量,并将Tomcat的安装路径添加到PATH变量中。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

117

2023.10.26

idea如何集成Tomcat
idea如何集成Tomcat

idea集成Tomcat的步骤:1、添加Tomcat服务器配置;2、配置项目部署;3、运行Tomcat服务器;4、访问项目;5、注意事项;6、关闭Tomcat服务器。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

171

2024.02.23

怎么查看Tomcat源代码
怎么查看Tomcat源代码

查看Tomcat源代码的步骤:1、下载Tomcat源代码;2、在IDEA中导入Tomcat源代码;3、查看源代码;4、理解Tomcat的工作原理;5、参与社区和贡献;6、注意事项;7、持续学习和更新;8、使用工具和插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

98

2024.02.23

常见的tomcat漏洞有哪些
常见的tomcat漏洞有哪些

常见的tomcat漏洞有:1、跨站脚本攻击;2、跨站请求伪造;3、目录遍历漏洞;4、缓冲区溢出漏洞;5、配置漏洞;6、第三方组件漏洞。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

169

2024.02.23

tomcat日志乱码怎么解决
tomcat日志乱码怎么解决

tomcat日志乱码的解决办法:1、修改tomcat的日志编码设置;2、检查ide的编码设置;3、检查操作系统的编码设置;4、使用过滤器处理日志;5、检查外部系统的编码设置;6、检查文件编码方式等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

157

2024.02.23

weblogic和tomcat有哪些区别
weblogic和tomcat有哪些区别

weblogic和tomcat的区别:1、功能;2、性能;3、规模;4、价格;5、安全性;6、配置和管理;7、社区支持;8、集成能力;9、升级和更新;10、可靠性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

200

2024.02.23

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

243

2024.02.23

tomcat启动闪退怎么解决
tomcat启动闪退怎么解决

tomcat启动闪退的解决办法:1、检查java环境;2、检查环境变量配置;3、检查端口被占用;4、检查配置文件编码;5、检查启动时需要的配置文件;6、检查相关文件是否丢失;7、检查防火墙和杀毒软件设置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

167

2024.02.23

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

24

2026.02.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4万人学习

C# 教程
C# 教程

共94课时 | 10.5万人学习

Java 教程
Java 教程

共578课时 | 75万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号