我正在创建以下路由,它使用 NTLM 身份验证,但始终返回 401 并出现以下错误
from("direct:start")
.setHeader(Exchange.HTTP_METHOD, () -> "GET")
.setHeader(Exchange.HTTP_URI, () -> "https://www.test.com")
.to("http://host" +
"?authMethodPriority=NTLM" +
"&authMethod=NTLM" +
"&authUsername=user" +
"&authPassword=pass")
.log("Response: ${body}");
错误堆栈
2024-05-20T12:06:11.556-03:00 WARN 24517 --- [pocs] [ main]
o.a.h.c.h.impl.auth.HttpAuthenticator : ex-0000000001 Negotiate{FAILED }
authentication error: No valid credentials provided (Mechanism level: No valid
credentials provided (Mechanism level: Failed to find any Kerberos tgt))
对于使用 NTLM 的路线有什么建议吗?
我尝试使用 'authMethod' = NTLM 但没有成功
您需要创建一个
bean
并将该 bean 作为调用的 clientBuilder
参数。比如这样
Bean 代码
@Bean(name = "httpClientBuilder")
public HttpClientBuilder httpClientBuilder() {
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(AuthScope.ANY, new NTCredentials(ntlmUsername, ntlmPassword, "", ""));
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
httpClientBuilder.setDefaultCredentialsProvider(credsProvider);
return httpClientBuilder;
}
注意,您必须将实际凭据放在那里,如果您需要域,还可以替换
""
构造函数中的 NTCredentials
。
路线:
from("direct:start")
.setHeader(Exchange.HTTP_METHOD, () -> "GET")
.setHeader(Exchange.HTTP_URI, () -> "https://www.test.com")
.to("http://host" +
"?clientBuilder=#httpClientBuilder")
.log("Response: ${body}");
使用
#httpClientBuilder
,您可以通过名称引用 bean。