我正在尝试将Kerberos身份验证连接到SOAP服务wsdl url。 我能够成功建立连接并进行服务呼叫。 启动服务器后,我能够至少进行一次成功的服务呼叫。 但是在几次请求(1次或更多次)之后,我突然收到无效的令牌错误。 一旦我收到错误,未来的通话就不起作用,错误仍然存在。
如果我重新启动服务器,那么服务调用至少会运行一次。上面的循环继续。
我无法弄清楚为什么突然令牌失效,尽管之前有效。 重新启动服务器会使令牌再次有效。
这是错误堆栈跟踪:
Caused by: GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag)
at sun.security.jgss.GSSHeader.<init>(GSSHeader.java:97)
at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:237)
at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:179)
答案 0 :(得分:3)
在没有看到Base 64值或十六进制转储的情况下,我假设客户端正在发送NTLM类型1令牌而Java不支持NTLM。
答案 1 :(得分:1)
我找不到令牌无效的根本原因。但这是我如何解决这个问题。
我的身份验证在我重新启动服务器后第一次工作,并且bean在上下文中再次加载。所以我将spring bean的范围更改为prototype
,以便每次创建新的代理bean时。