Java项目启动报错?警惕360安全软件的“隐形”注入

做开发的兄弟们电脑里大多都有几个常驻的安全软件,毕竟为了图个心安。但最近有个挺有意思的坑,不知道大家踩过没有。

IDEA运行控制台报错日志

IDEA启动项目后控制台出现的报错日志,提示动态加载了Java代理

前几天,为了应付某些“不得不装”的场景,我在电脑上按了360安全软件。结果今天打开IDEA一启动项目,控制台直接给我红了一大片,看得人心慌。

离谱的启动日志

具体的报错日志大概是这个样子的:

OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
WARNING: A Java agent has been loaded dynamically (E:\Program Files\safemon\qhjwsp\bin\qhjwsp-agent-1.0.3.jar)
WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warning
WARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more information
WARNING: Dynamic loading of agents will be disallowed by default in a future release
``
**重点来了!** 请注意倒数第二行之前的那个路径:
`E:\Program Files\safemon\qhjwsp\bin\qhjwsp-agent-1.0.3.jar`

看到 `safemon` 和 `qhjwsp` 这几个字大家应该就明白了,这明显是带“Q”字头的安全软件的目录。意思是它悄悄地给自己的Java代理挂载到了我的JVM进程里。

## 这到底是怎么回事?

### 1. Java Agent 动态注入机制
先科普一下,Java Agent是Java提供的一种强大的机制,允许开发者在类加载之前或之后对字节码进行修改(比如APM监控工具、热部署工具)。它通常有两种加载方式:
*   **启动时加载**:通过 `-javaagent:jar包路径` 参数加载。
*   **运行时动态加载**:使用 Attach API 动态注入到正在运行的JVM中。

日志里提示 `A Java agent has been loaded dynamically` 说明360这类软件是“后发制人”,它监控到了Java进程的启动,然后强行把自己的 `qhjwsp-agent-1.0.3.jar` 注入进来了。

### 2. 为什么要这么做?
安全软件这么做通常是为了“保护”或“扫描”。它们需要挂载到 JVM 内部来监视 Java 程序的运行行为,防止恶意代码或者进行所谓的云查杀。但对于开发环境来说,这种行为往往是“好心办坏事”的噩梦源头,会导致类冲突、启动变慢,甚至像现在这样产生大量的警告日志干扰视线。

## 遇到这种情况咋办?
遇到这种问题,第一反应可能是“赶紧卸载!”。但很多时候我们受限于公司电脑管理或者某些特定需求,不敢随便乱卸,怕把环境搞崩或者引起其他系统文件的误伤。

其实针对这种警告,我们有比较温和的处理方案,不必非要硬刚安全软件。

![360安全软件设置中心白名单配置](/media-load/019f16fc-9310-7c6d-b0f8-7eab9fab58c8)

*在360安全软件中添加IDEA和JDK到信任列表的操作界面*

### 方案一:配置IDEA忽略警告(治标)
如果你确认项目运行本身没有问题,只是看着日志心烦,可以在IDEA的运行配置里加一点参数来压制这些警告。不过,这并不代表 Agent 没有注入,只是眼不见为净。

### 方案二:设置安全软件白名单(治本)
这是最推荐的方法。我们需要告诉安全软件:“IDEA和我的开发环境是好人,别瞎插手”。

1.  打开360安全软件的设置中心(通常在右下角托盘图标里)。
2.  找到 **“防护中心”** 或者 **“安全防护中心”**。
3.  寻找类似 **“自我保护”** 的选项,先暂时关闭一下(部分设置修改需要关闭此功能)。
4.  进入 **“功能设置”** 或 **“进程白名单”**。
5.  将你的 IntelliJ IDEA 的主程序(`idea64.exe`)以及你常用的 JDK 安装目录添加到 **“信任列表”** 或 **“免打扰模式”** 中。
6.  不要忘了检查 **“防黑加固”** 或者 **“内核加固”** 里是否有针对 Java 进程的注入选项,将其关闭或设为不监控 Java 开发工具。

设置完成后,记得把“自我保护”重新打开。重启IDEA,再跑一下项目,你会发现那个讨厌的 Dynamic Agent 警告不见了。

## 总结
开发环境需要纯净,而国产安全软件往往习惯“大包大揽”。当你看到 `Dynamic loading of agents` 这种不知所云的警告时,先别慌,看一眼路径,大概率又是某卫士在偷偷“帮忙”。

只要合理配置白名单,既能保留系统安全防护,又能还开发环境一片清净,何乐而不为呢?希望这次的排查过程能帮到正在抓狂的你!

标签: none

评论已关闭