You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenJDK 11下JavaFX WebView无法加载ADFS NTLM自动登录网站

问题分析(Java 8 vs OpenJDK 11的核心差异)
  • NTLM认证自动重试逻辑变更:Java 8自带的JavaFX WebView基于旧版WebKit,会自动处理NTLM认证的401重试——收到401响应后,会自动携带NTLM凭证发起二次请求。而OpenJDK 11剥离JavaFX后,OpenJFX的WebView采用更新的WebKit实现,默认关闭了NTLM的自动重试逻辑,导致首次401后请求直接终止。
  • NTLM版本支持的默认配置差异:Java 8默认兼容NTLMv1和v2,而OpenJDK 11默认仅启用NTLMv1,若ADFS服务器要求NTLMv2,会直接导致认证失败且无法触发后续流程。
  • 安全认证权限控制升级:OpenJDK 11对网络认证的权限控制更严格,java.net.Authenticator的默认行为被调整,不再自动注入系统凭证,需要显式配置才能生效。
解决方法(OpenJDK 11环境下的修复步骤)
  1. 显式配置NTLM认证器
    实现Authenticator提供NTLM认证所需的域、用户名和密码,确保WebView能获取到正确的凭证:

    Authenticator.setDefault(new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(
                "YOUR_DOMAIN\\YOUR_USERNAME",
                "YOUR_PASSWORD".toCharArray()
            );
        }
    });
    
  2. 强制启用NTLMv2支持
    通过系统属性指定使用NTLMv2,匹配ADFS服务器的认证要求:

    // 代码内设置
    System.setProperty("jdk.http.auth.ntlm.version", "v2");
    

    或在应用启动参数中添加:

    -Djdk.http.auth.ntlm.version=v2
    
  3. 设置HTTP认证偏好为NTLM
    强制系统优先使用NTLM认证,避免其他认证方式干扰:

    System.setProperty("http.auth.preference", "NTLM");
    
  4. 对齐WebView的User-Agent
    部分ADFS服务器会根据User-Agent限制认证流程,将WebView的User-Agent修改为Java 8环境的版本:

    WebEngine webEngine = webView.getEngine();
    webEngine.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) JavaFX/8.0 Safari/537.36");
    
  5. 使用与OpenJDK 11匹配的OpenJFX版本
    避免版本不兼容问题,优先选择OpenJFX 11.x系列(如11.0.2),而非更高版本的OpenJFX。

内容的提问来源于stack exchange,提问作者Puneet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 02:15:40