使用 SSPI 从 Windows 上运行的 Java 应用程序获取 SSO

2023-12-27

我有一个在 Windows 上运行的 Java 应用程序,需要使用 Kerberos/SPNEGO 对 Web 应用程序进行身份验证。我知道如何配置 JAAS 来实现此目的,但我发现 Java(JDK6 和 JDK7beta)Kerberos 实现缺少一些我需要的重要功能。例如,支持引用或使用 DNS 来确定主机的领域(我有一个多领域环境)。

是否有第三方模块可以使用Windows本机实现身份验证SSPI http://msdn.microsoft.com/en-us/library/aa380493(VS.85).aspx?我们已经经历了配置 Windows 客户端以在我们的环境中工作的麻烦,如果不必为 Java 再次执行此操作,那就太好了。我知道Waffle http://waffle.codeplex.com及其 WindowsLoginModule,但它似乎没有执行 SSO,因为它要求用户在应用程序中重新输入其凭据。


我们也遇到过类似的问题。我们面临的主要问题是使用 Windows UAC 时 GSS-API 实现失败,我们使用 Waffle 解决了这个问题。

Waffle https://github.com/dblock/waffle基本上是 JNA 调用 SSPI 的包装器。我们成功地使用 Waffle 通过重写该类来实现 SSOsun.net.www.protocol.http.NegotiatorImpl:

package sun.net.www.protocol.http;

import java.io.IOException;
import waffle.windows.auth.impl.WindowsSecurityContextImpl;

public class NegotiatorImpl extends Negotiator {

private String serviceName;

public NegotiatorImpl(HttpCallerInfo hci) throws IOException {
    this.serviceName = "HTTP/" + hci.host.toLowerCase();
}

    @Override
    public byte[] firstToken() throws IOException {
        return WindowsSecurityContextImpl.getCurrent("Negotiate", serviceName).getToken();
    }

    @Override
    public byte[] nextToken(byte[] in) throws IOException {
        return new byte[0];
    }
}

然后,您可以创建一个仅包含此类的 JAR,并将其与 Waffle 和 JNA JAR 一起复制到./jre/lib/认可你的 JVM 的。使用Java 认可的标准覆盖机制 http://docs.oracle.com/javase/8/docs/technotes/guides/standards/JVM 的,这取代了默认的NegotiatorJVM 的实现。

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

使用 SSPI 从 Windows 上运行的 Java 应用程序获取 SSO 的相关文章

  • 通过 InjectMocks Spy 注入对象

    我需要对一个类运行一系列单元测试 该类具有 Autowired Logger 实现 实现的基本思想是 Mock Logger logger InjectMocks TestedClass tested 但我想保存日志输出功能 Mockito
  • 如何对 IntStream 进行逆序排序

    我正在使用 txt 文件读取数字BufferedReader 我想颠倒该流中元素的顺序 以便在收集它们时 它们将从最高到最低排列 我不想在构建数组后进行排序 因为我不知道其中可能有多少元素 我只需要最高的 N 个元素 in new Buff
  • 服务器到 Firebase HTTP POST 结果为响应消息 200

    使用 Java 代码 向下滚动查看 我使用 FCM 向我的 Android 发送通知消息 当提供正确的服务器密钥令牌时 我收到如下所示的响应消息 之后从 FCM 收到以下响应消息 Response 200 Success Message m
  • spring - 强制 @Autowired 字段的 cglib 代理

    我有混合堆栈 EJB 和 Spring 为了将 Spring 自动装配到 EJB 我使用SpringBeanAutowiringInterceptor 不确定这是否会影响我遇到的问题 在尝试通过以下方式自动装配 bean 时 Scope p
  • 带图像的简单 GUI [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我试图在简单的 GUI 上显示一些卡
  • Java替换特定字符

    这是我在这个网站上的第一个问题 所以我会尽量不要成为一个十足的菜鸟 我目前正在用java 创建刽子手游戏 所以我问你的问题是我们是否被赋予了 幽灵 这个词 并将 Ghost 替换为 hiddenWord ghost length for i
  • 为什么我在 Mac 上看到“java.lang.reflect.InaccessibleObjectException: Unable to make private java.nio.DirectByteBuffer(long,int)accessibl

    我已经在工作中愉快地构建代码好几天了 但突然我的一个项目 不是全部 失败并出现此错误消息 看看下面的答案吧 我是如何修复它的 起初我用谷歌搜索 看到很多有这个问题的人正在使用 Java 16 但我认为 错误 我正在使用 Java 11 因为
  • 无法打开 Python。错误 0xc000007b

    我最近一直在学习 Python 3 我在我的上网本 32 位 Windows 7 上创建简单的小程序没有任何问题 当我将它安装在我的上网本上时 我没有遇到任何问题 但现在我已经开始使用它了 我想将它安装在我的台式机上 并且我有一个 我的桌面
  • 尝试在没有 GatewayIntent 的情况下访问消息内容

    我希望每当我写一条打招呼的消息时 机器人都会在控制台中响应一条消息 但它只是给我一个错误 JDA MainWS ReadThread WARN JDA Attempting to access message content without
  • 如何在java中使jpeg无损?

    有没有人可以告诉我如何使用编写 jpeg 文件losslessjava中的压缩 我使用下面的代码读取字节来编辑字节 WritableRaster raster image getRaster DataBufferByte buffer Da
  • 让JScrollPane控制多个组件

    对于我的应用程序 我正在设计一个脚本编辑器 目前我有一个JPanel其中包含另一个JPanel保存行号 位于左侧 以及JTextArea用于允许用户输入代码 位于右侧 目前 我已经实施了JScrollPane on the JTextAre
  • 在 AKKA 中,对主管调用 shutdown 是否会停止其监督的所有参与者?

    假设我有一位主管连接了 2 位演员 当我的应用程序关闭时 我想优雅地关闭这些参与者 调用supervisor shutdown 是否会停止所有参与者 还是我仍然需要手动停止我的参与者 gracias 阻止主管 https github co
  • 不兼容的类型:在 java netbeans 中对象无法转换为 String

    我试图在我的项目中使用对象数组 但出现错误 incompatible types Object cannot be converted to String 在这一行 ST1 new String emt1 emt2 emt3 emt4 现在
  • 在 Selenium WebDriver 上如何从 Span 标签获取文本

    在 Selenium Webdriver 上 如何从 span 标记检索文本并打印 我需要提取文本UPS Overnight Free HTML代码如下 div id customSelect 3 class select wrapper
  • 使用 Java 从 S3 上的文件在 S3 上创建 zip 文件

    我在 S3 上有很多文件 需要对其进行压缩 然后通过 S3 提供压缩文件 目前 我将它们从流压缩到本地文件 然后再次上传该文件 这会占用大量磁盘空间 因为每个文件大约有 3 10MB 而且我必须压缩多达 100 000 个文件 所以一个 z
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • 重写Object类的finalize()方法有什么用?

    据我所知 在java中如果我们想手动调用垃圾收集器 我们可以执行System gc 1 我们在重写的finalize 方法中做了哪些操作 2 如果我们想手动调用JVM垃圾收集器 是否需要重写finalize 方法 我们在重写的 Finali
  • MongoDB Java 驱动程序:MongoCore 驱动程序与 MongoDB 驱动程序与 MongoDB 异步驱动程序

    MongoDB Java 驱动程序有三种不同的驱动程序选项 核心驱动 MongoDB 驱动程序 MongoDB 异步驱动程序 The 驱动程序描述页面 https docs mongodb org ecosystem drivers jav
  • Spring Boot MSSQL Kerberos 身份验证

    目前在我的春季靴子中application properties文件中 我指定以下行来连接到 MSSql 服务器 spring datasource url jdbc sqlserver localhost databaseName spr
  • Java 推断泛型类型

    我正在寻找类似的推断捕获泛型类型的概念 类似于以下方法片段 但不是捕获泛型类型的类 public

随机推荐

  • 在 WebBrowser 控件中全屏播放 YouTube

    我有以下 XAML
  • VueJS 2.0 - 无法在道具更新上挂钩组件

    我需要在更新时强制重新渲染组件才能调用FB XFBML parse 但是 无论我做什么 我都无法调用任何生命周期挂钩beforeUpdate updated当属性更新时 根据docs https v2 vuejs org v2 guide
  • 针对不同节点版本编译的 Couchbase Node

    在unix系统中运行时出现此错误 Error The module app node modules couchbase build Release couchbase impl node was compiled against a di
  • AWS DynamoDB v2:我是否需要辅助索引来进行替代查询?

    我需要创建一个表 其中包含由连续运行的进程生成的数据片段 此过程生成的消息包含两个必需组件 其中包括 全局唯一的消息 UUID 和消息时间戳 这些消息稍后将通过 UUID 检索 此外 我需要定期删除该表中太旧的所有消息 即其时间戳距当前时间
  • Java VM 上的内存屏障和编码风格

    假设我有一个静态复杂对象 它由线程池定期更新 并在长时间运行的线程中或多或少地连续读取 对象本身始终是不可变的 反映了事物的最新状态 class Foo int a b static Foo theFoo void updateFoo in
  • 从一个 Docker 容器连接到另一个 Docker 容器

    我正在 Docker 容器内运行一个 Java 应用程序 该容器应该连接另一个容器内的 MySQL 尝试了表格中建议的多种选项 但没有任何效果 这是我的 Docker Compose 文件 version 3 services app bu
  • 无法从其他 docker 容器调用 GET 方法(HTTP 500)

    我有两个 Symfony 服务器实例 第一个位于 127 0 0 1 8080 第二个位于 127 0 0 1 8081 当我尝试发送时POST https i stack imgur com PiOdX png方法从第二审 https i
  • Spring Security 循环 bean 依赖

    我目前正在开发 Vaadin 弹簧应用程序 根据应用规范 用户的认证 授权必须通过查询数据库来完成jdbcTemplate 如何解决这个问题 我正在使用 Spring Boot 1 4 2 RELEASE UPDATE 此方法适用于 Spr
  • 使用客户端证书 sslv3 握手失败的 Boost asio GET

    我想做一个简单的 C web get 类似于这个curl命令所做的事情 我可以使用 boost 中的 asio 我必须使用boost 1 49 curl https mysite dev api v1 search q test https
  • NSOutlineView 不折叠项目

    我有一个 NSOutlineView 单击一行将展开 折叠该项目 如果它是可展开的 if self outlineView isItemExpanded item NSLog Will collapse item item self out
  • 模态打开时如何发送参数json数组?

    演示和完整代码是这样的 https jsfiddle net xzxrp7nn 5 https jsfiddle net xzxrp7nn 5 我的 HTML 代码是这样的 div div div class modal fade div
  • 为什么 Bootstrap 网格布局比 HTML 表格更可取?

    注意 对于那些可能将此问题与 为什么不使用表格进行 HTML 布局 混淆的人 我不是在问这个问题 我要问的问题是为什么网格布局与表格布局根本不同 我正在为一个项目研究 CSS 库 特别是 Bootstrap 我是一名程序员而不是网页设计师
  • 角度 ui 路由器中的 404 页面

    我在有角度的单页应用程序中使用 ui router 我定义了一些路由 并且有一个特定的 404 路由 如下所示 app config function urlRouterProvider stateProvider urlProvider
  • DLL 地狱 - 无法加载文件或程序集 System.Threading.Tasks.Extensions

    我有一个非常简单的 NET Framework 4 7 2 应用程序 其中包含以下内容
  • RabbitMQ 的 Spring SimpleMessageListenerContainer 因无效消息而中止

    我正在使用 springs SimpleMessageListenerContainer 来消费来自 RabbitMQ 队列的消息 一切工作正常 但是当无效消息发送到队列 例如无效 json 时 侦听器就会中止 关闭工作线程并且不接受任何进
  • 如何在 python 中将整数添加到字符串 - Oanda API

    我正在尝试使用 Oanda 的 REST API 添加止损订单和买入订单 截至目前 我可以轻松指定止损价格 但是 我想根据当前价格计算止损 例如 current price 1 我对 Python 不太熟悉 因此这是一个简单的问题 但这让我
  • 有“vim运行日志”吗?

    有时我会在 vimrc 中尝试自定义 命令 一切似乎都是正确的 但就是行不通 很难知道 vim 启动时发生了什么 也很难知道哪个命令失败了 因此很难调试导致我的 vimrc 中出现问题的原因 这是一种试错方法 非常耗时 而且确实是一种 PI
  • 如何确定 Android OpenGL ES 上的最大纹理内存

    我正在 Android 上编写混合 2D 3D 游戏 但无法确定可以使用多少纹理内存 有没有办法确定 OpenGL ES 中的最大纹理内存 我有自己的纹理缓存 想知道纹理内存的最大阈值 我正在使用进行近似估计activityManager
  • IFrame调用父函数

    iframe 是否可以调用父级的函数 即使它们不在同一个域中 当它们不在同一域中时 我的实际方法会引发安全错误 在 iframe 内我会这样做 非常感谢 您不能直接调用该函数 由于同源政策 http en wikipedia org wik
  • 使用 SSPI 从 Windows 上运行的 Java 应用程序获取 SSO

    我有一个在 Windows 上运行的 Java 应用程序 需要使用 Kerberos SPNEGO 对 Web 应用程序进行身份验证 我知道如何配置 JAAS 来实现此目的 但我发现 Java JDK6 和 JDK7beta Kerbero