V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
LinJunzhu
V2EX  ›  问与答

SpringBoot 项目对外的请求全部走了系统网络代理

  •  
  •   LinJunzhu · 2020-04-28 22:06:03 +08:00 · 1281 次点击
    这是一个创建于 1674 天前的主题,其中的信息可能已经有所发展或是发生改变。
    基本环境:

    1. MacOS
    2. SpringBoot 2
    3. 使用了 Clash,并且设为了系统代理 (通过 Wifi -> 代理设置 可以看到)

    今天惊讶的发现,在项目内对外请求 API 、JDBC 的数据库连接,流量全都走了 Clash (看的日志),按道理不应该会去读取系统的代理设置。

    发现:System 常量内有 http.proxyHost 和 http.proxyPort 属性, 通过搜索,得知可以直接设置这两个值,从而使项目对外的流量可以直接走代理。

    而我再次确认,这两个属性,我并没有设置为环境变量。

    搜索了好一阵子,也没有相关答案。

    找到了相关的一个答案,将 java.net.useSystemProxies 设置为 false,可以不走系统代理,然而看文档该值默认就是为 false 的, 而我从 System 变量没有找到该属性,尝试启动项目时设置该属性,依旧是 走了系统代理

    大家的项目,对外 API 请求的流量,也是默认走系统代理的吗?
    3 条回复    2022-07-12 12:36:40 +08:00
    LinJunzhu
        1
    LinJunzhu  
    OP
       2020-04-28 22:07:55 +08:00
    项目是在 IDEA 内运行的, 尝试打成 jar 包,直接运行 jar 包跑起项目,对外的流量依旧是走了系统代理
    MarkP
        2
    MarkP  
       2022-07-11 18:31:16 +08:00   ❤️ 1
    今天我也发现了这个问题,并找到了答案。
    https://stackoverflow.com/questions/36847075/how-does-jvm-automatic-setting-of-os-xs-system-proxies-work

    可以这么概括:JDK 初始化时会调用 setProxyProperties 方法,来读取 OSX 的系统代理设置,一旦找到,会将其设置到 Java properties 中。
    LinJunzhu
        3
    LinJunzhu  
    OP
       2022-07-12 12:36:40 +08:00
    @MarkP 老哥强! 点赞!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3901 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:21 · PVG 18:21 · LAX 02:21 · JFK 05:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.