如何在调用任何 url 时提供 ntlm 身份验证?

2024-03-18

我有一个使用 ntlm(Windows 集成身份验证)进行身份验证的托管 URL。我在 windows 上使用 java 1.8

URL url = new URL("someUrl");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
// con.setInstanceFollowRedirects(false);
con.setRequestProperty("Content-Type", "application/json");
con.setRequestMethod("GET");
 int responseCode = con.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK) {
            // read response
            ...
            in.close();
            }else{
            System.out.println("Error while fetching reponse, recieved response code " + responseCode);
            }

上面的代码曾经工作到java 1.8.0_181 随着后续的更新,它开始失败,我用 191 和 201 进行了测试。 如果向后移植到 181,该代码仍然有效。 我也尝试过使用 Authenticator,但它没有被调用(不知道为什么) 通过java的内部日志记录,我可以在日志中看到以下消息“NegotiateAuthentication:java.io.IOException:协商支持未启动”我得到 401

我期待任何机制来帮助java自行协商身份验证。


在 Java 发行说明中没有提及任何地方,但 NTLM 身份验证实现发生了变化。 我已经调试了java代码并得出以下结果 在 java.home/lib 中有文件 net.properties,现在提到以下内容

#
# Transparent NTLM HTTP authentication mode on Windows. Transparent authentication
# can be used for the NTLM scheme, where the security credentials based on the
# currently logged in user's name and password can be obtained directly from the
# operating system, without prompting the user. This property has three possible
# values which regulate the behavior as shown below. Other unrecognized values
# are handled the same as 'disabled'. Note, that NTLM is not considered to be a
# strongly secure authentication scheme and care should be taken before enabling
# this mechanism.
#
# Transparent authentication never used.
#jdk.http.ntlm.transparentAuth=disabled
#
# Enabled for all hosts.
#jdk.http.ntlm.transparentAuth=allHosts
#
# Enabled for hosts that are trusted in Windows Internet settings
#jdk.http.ntlm.transparentAuth=trustedHosts
#
jdk.http.ntlm.transparentAuth=disabled

直到 jdk1.8.0_181 为止,都有一个默认的 NTLM 身份验证回调,这在 NTLM 身份验证过程中很有用。

要在 jdk1.8.0_181 及以上版本上运行上述代码,您只需设置jdk.http.ntlm.transparentAuth为你的java进程。

或者,您可以设置 JVM 参数,例如,-Djdk.http.ntlm.transparentAuth=allHosts,或设置系统属性,例如,System.setProperty("jdk.http.ntlm.transparentAuth", "allHosts").

如果你选择可信主机,确保该 URL 添加到 Windows 受信任站点中。

您可以在静态初始化期间看到这里使用的这个新系统属性:sun.net.www.protocol.http.ntlm.NTLMAuthentication.

此外,您可以看到此处使用了该设置:public static boolean NTLMAuthentication.isTrustedSite(URL)

最后,要以编程方式控制 URL 是否可信,您可以安装回调。看:sun.net.www.protocol.http.ntlm.NTLMAuthenticationCallback

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在调用任何 url 时提供 ntlm 身份验证? 的相关文章

随机推荐

  • 在 C# 中实现 OPOS 设备

    对于与旧版 POS 应用程序的某些互操作 我想知道是否可以在 C 中实现虚假的 OPOS 设备 基本上我会实现一个假键盘 它接受网络请求并将按键传递给遗留应用程序 有谁知道这是否可能或在哪里可以获得文档 我认为 OPOS 只是调用由注册表项
  • 将多列粘贴在一起

    我在数据框中有一堆列 我想将它们粘贴在一起 用 分隔 如下所示 data lt data frame a 1 3 b c a b c c c d e f d c g h i i e a b c d 1 a d g 2 b e h 3 c f
  • 如何对 Django 数据库迁移进行单元测试?

    我们使用 django 迁移 django v1 7 更改了数据库 数据库中存在的数据不再有效 基本上我想通过在单元测试中构建预迁移数据库 添加一些数据 应用迁移来测试迁移 然后确认一切顺利 一个人如何 加载单元测试时阻止新的迁移 I fo
  • 没有 AVAsset 的纯色 AVMutableComposition

    这是我的最终目标 我想使用AVVideoCompositionCoreAnimationTool从 Core Animation 创建视频 我不会在此组合中使用现有的 AVAsset 我的问题是 我该如何使用AVMutableComposi
  • 猫鼬预保存和验证之间的区别?什么时候使用哪一个?

    目前我正在使用pre save 进行验证 UserSchema pre save true function next done var self this in case inside a callback var msg helper
  • Angular 4 材质是否像 bootstrap 一样响应式?

    我正在使用 Angular 4 开始一个新项目 需要创建响应灵敏且令人愉悦的用户界面 bootstrap 为您提供响应能力 但没有物质感 棱角分明的材质提供了良好的 UI 体验https material angular io https
  • 防止箭头键更改选定的单选按钮

    我有几个单选按钮 我想阻止按下向上 向下箭头键来更改选定的单选按钮 如果您选择其中一个单选按钮 然后按向上 向下箭头键 它将选择上一个或下一个单选按钮 相反 我希望选择保持不变 为此我可以使用event preventDefault 在某些
  • Jgrid 生成 XML 时出现问题

    我正在使用 Jgrid 我像我们大多数人一样使用 Xml 将数据注入到网格中 我想要批量更新数据库 我的要求是 当我单击 保存更改 时 它会生成当前 更新的 网格数据的 Xml 那么 我如何生成Jgrid数据的Xml 请帮忙 这是代码
  • C++ 模板:返回 list::iterator

    我怎样才能使下面的代码工作 在编译过程中 我收到一条错误消息 告诉我searchForResource函数没有返回类型 template
  • 为什么我的 UILabel 不显示 NSInteger

    我有一个 ViewController 和 GameController 类 它是 NSObject 的子类 视图控制器有一个链接到它的按钮 并触发一个初始化 GameController 类的 IBAction 在 GameControl
  • 剪切背景以露出下面的图层

    有没有办法剪切 div 背景以暴露下面的图层 就像这样 to this 欢迎任何前沿的 CSS 规则 UPDATE 好的 我做了一个示例代码 http jsfiddle net coma 9ae7g 1 http jsfiddle net
  • 创建新文件时,vscode 让我选择一个编辑器

    When creating a new file vscode let me select an editor It hasn t do so and I don t want to choose one because I only us
  • 我应该如何处理 Perl 中不再使用的对象?

    我正在编写一个链接到外部资源的类 其中一种方法是破坏外部资源的删除方法 不应对该对象进行进一步的方法调用 我正在考虑设置一个标志 如果设置了标志 那么就会在所有方法中死亡 但是有没有更好 更简单的方法呢 也许涉及破坏 到目前为止 我真的很喜
  • Android Studio:“libpng 警告:iCCP:无法识别已编辑的已知 sRGB 配置文件”

    我花了几个小时试图解决这个问题 app mergeDebugResources AAPT err 927129865 C Users Will AndroidStudioProjects Splitter2 app build interm
  • 从两个绝对路径获取相对路径

    我有两个绝对文件系统路径 A 和 B 并且我想生成第三个文件系统路径来表示 A 相对于 B 使用案例 管理播放列表的媒体播放器 用户将文件添加到播放列表 新文件路径已添加到播放列表相对于播放列表路径 将来 整个音乐目录 包括播放列表 都会转
  • ANGULAR 2 - 组件共享数据服务

    这真的让我很头疼 我有一个不错的小应用程序 使用 Firebase 和 Angular 2 设置社交登录 一切都应该是实时的 基本上 当用户通过 Facebook 登录时 我希望将他们的个人信息传递到服务并存储为 Observable 并立
  • 如何在Python中的一个图形上绘制多个kdeplot

    我有以下数据 name val G Kittle 4 0 G Kittle 10 0 D Hopkins 3 0 L Fitzgerald 6 0 C Kupp 18 0 R Woods 21 0 N Harry 7 0 S Michel
  • Angular:创建 Angular 项目时出现新错误

    我使用时遇到此错误ng 新项目名称 发现无效的配置文件 angular json 请在运行命令之前删除该文件 我收到此错误 我不知道如何获得解决方案 我卸载了 angular cli 并再次安装 npm clean 缓存也不起作用 我不知道
  • 持续监听TCP端口

    我编写了一个能够通过 TCP 协议从端口接收数据的代码 我每 15 分钟从 ESP8266 接收一次数据 然后 ESP 进入深度睡眠模式 如何改变它才能使其持续工作 我想在 while 循环中创建一个新连接 但它不起作用 My code i
  • 如何在调用任何 url 时提供 ntlm 身份验证?

    我有一个使用 ntlm Windows 集成身份验证 进行身份验证的托管 URL 我在 windows 上使用 java 1 8 URL url new URL someUrl HttpURLConnection con HttpURLCo