Java 中的简单 Kerberos 客户端?

2024-07-01

Google Chrome 和 IE 等应用程序可以透明地处理 Kerberos 身份验证;但是我找不到一个“简单”的 Java 解决方案来匹配这种透明度。我发现的所有解决方案都需要存在 krb5.conf 文件和 login.conf 文件,而上述应用程序似乎都不需要。

构建具有正常运行的 Kerberos SSO 功能的 Java 应用程序的最佳方法是什么?

[更新]:要明确的是,我需要一个CLIENT侧面解决方案创建票证不验证它们。另外,SPNEGO 似乎是默认的“包装”协议,最终将委托给 Kerberos,但我也需要能够处理 SPNEGO 协议。


现在有一个简单的解决方案,使用Apache HTTP 组件客户端 http://hc.apache.org/downloads.cgi4.5 或更高。这在 4.5 中仍然被标记为实验性的,因此您的情况可能会有所不同,但这对我来说在企业环境中工作得很好。

除了 HC 4.5 客户端 jar 之外,您还需要在类路径中包含 httpclient-win、jna 和 jna-platform jar,如 http-component-client 提供的那样。然后,您可以按如下方式构建启用 Kerberos 的 HC 客户端:

CloseableHttpClient httpclient = WinHttpClients.createDefault();

或者使用构建器:

HttpClientBuilder clientBuilder = WinHttpClients.custom();

然后可以在构建客户端之前根据需要进行自定义:

CloseableHttpClient client = clientBuilder.build();

该解决方案无需任何外部配置即可工作,最重要的是解决了 Windows 7+ 上具有本地管理员权限的用户的内置 JRE 机制中断的问题。这是可能的,因为 Kerberos 票证是通过 JNA 直接从 SSPI API 检索的,而不是通过 JRE 提供的 GSSAPI。

示例代码 https://hc.apache.org/httpcomponents-client-ga/httpclient-win/examples/org/apache/http/examples/client/win/ClientWinAuth.java来自 http-components 团队

这一切都得益于丹尼尔·杜布罗夫金 https://github.com/dblock 蒂莫西·沃尔 https://github.com/twall and 瑞安·麦金利 https://github.com/ryantxu

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

Java 中的简单 Kerberos 客户端? 的相关文章

  • java代码中的问号

    有人能解释一下下面代码中的问号吗 INITIAL PERMANCE 也是代码中的静态最终常量 但是语法的最后一行被称为什么 Synapse AbstractCell inputSource float permanence inputSou
  • 使用应用程序属性的 @Cacheable 条件

    我正在尝试将 Redis 与 Spring 一起使用 Cacheable但需要根据 Spring Boot 样式应用程序属性有条件地打开或关闭缓存 我的第一次尝试似乎不起作用 application properties 文件 auth t
  • Java可以用来写Win32系统服务吗?

    标题有点概括了 我正在考虑使用Jabaco http www jabaco org因为它生成 EXE 以及 jar 文件 而且我对 VB 语法比对 Java 更熟悉 你当然可以用Java 服务包装器 http wrapper tanukis
  • 当不读取带有 URL 的 QR 码时,zxing QRCodeReader 中出现 ChecksumException

    如果我扫描带有 URL 的 QR 码 以下代码可以完美且快速地运行 然而 如果我用简单的字符串或数字序列解码 QR 码 这就是我想要做的 它有时会随机工作 但 99 的情况下它会失败并出现 ChecksumException if webc
  • 使用 == 比较 Long 对象类型和原始 int

    我有一个通过调用返回 Long 对象数据类型的方法 resp getResultCode 我想比较一下HttpStatus GONE value 它实际上只返回一个原始 int 值410 Long 会拆箱自身以正确地与 int 原语进行比较
  • Mac 上缺少 spring-boot-starter-web hibernate-validator 依赖项

    我在STS Spring工具套件 上创建了Spring Boot项目 Spring Starter Project Window和Mac都有 这是我的pom xml
  • 使用 Jackson 反序列化非字符串映射键

    我有一张如下所示的地图 public class VerbResult JsonProperty similarVerbs private Map
  • 什么是运行时绑定?

    根据 Android 开发者指南 Intent 是一个提供运行时绑定独立组件之间 例如两个活动 什么是 运行时绑定 继承创建类型兼容性 它允许超类引用 引用子类的对象 反过来则不然 超类引用 指的是 子类的对象 只能用于 访问继承的和重写的
  • 线程完成时是否发出通知信号?为什么此代码示例有效?

    我正在寻找一些线索的谜题 但我不明白为什么以下内容始终打印999999 class Job extends Thread private Integer number 0 public void run for int i 1 i lt 1
  • HQL查询是否总是命中数据库并得到结果?

    我正在经历休眠以及何时使用的情况Criteria vs HQL我的理解是 使用 Hibernate 每次我们通过以下方式查询数据库时Criteria or HQL在这两种情况下 休眠都会获取结果集并放入内存中 然后当我们再次调用该查询时 将
  • JPA 多对多关系创建两个联接表

    我正在尝试在之间创建多对多关系User and FileObject假设用户可以访问许多文件对象的类 并且文件对象可以由许多用户和一对多关系访问 因为一个用户可以拥有许多文件 但一个文件只能由一个用户拥有 这是我的代码 Entity pub
  • 数组等于忽略顺序[重复]

    这个问题在这里已经有答案了 可能的重复 Java 检查数组的相等性 顺序无关紧要 https stackoverflow com questions 10154305 java checking equality of arrays ord
  • Java 中是否可以使用原始类型(int)作为泛型类型?

    具体来说 用一个SortedMap
  • 以编程方式创建 PDF 相册

    我有一组 PDF 相册模板 它们有空白方块 用于放置文本和照片 我的需要是使用这些模板来生成实际的专辑 我的计划是使用 iText 和 Java 我会向应用程序发送一个包含所有要使用的图像 URL 的数组 我将确切地知道图像应该放置在模板上
  • CodenameOne 在构建后停止工作

    我对 codenameone 有一个奇怪的问题 我什至不确定出了什么问题 我尝试过 发送 Windows Phone 版本 并且从那时起我认为我没有更改任何其他内容 然而 在我这样做之后 模拟器无法启动并一直说我的导入是错误的 事实并非如此
  • 如何为 CompletableFuture::supplyAsync 选择执行器

    CompletableFuture supplyAsync gt IO bound queries 如何为 CompletableFuture supplyAsync 选择执行器以避免污染ForkJoinPool commonPool 里面
  • Android - 循环 strings.xml 文件

    我想知道是否有办法循环strings xml file 假设我有以下格式
  • Java:Set接口和Collection接口的区别

    我刚刚查了一下Set接口 发现它大部分 或完全 只重新声明已经存在于Collection界面 Set本身延伸Collection 所以这是否意味着Set界面自动具有所有功能Collection 那么为什么要重新声明它们呢 例如 Set重新声
  • Spring Security 登录页面

    我开发了一个使用 Spring Security 的默认登录页面的应用程序 不过我想实现我自己的登录页面 我将放置一个login html 而不是jsp 页面 我想使用 JQuery 来实现它 我检查了很多例子但无法实现 我是 Spring
  • Spring Security 登录页面

    我开发了一个使用 Spring Security 的默认登录页面的应用程序 不过我想实现我自己的登录页面 我将放置一个login html 而不是jsp 页面 我想使用 JQuery 来实现它 我检查了很多例子但无法实现 我是 Spring

随机推荐