我正在使用Apache 2.19,并且在使用camel-http模块调用我的端点时可以使用NTLMv1,该模块支持开箱即用的NTLMv1:
from("activemq:{{queue.feedback}}")
.to("http://localhost:8888/ntlm/secured?authMethodPriority=NTLM
&authMethod=NTLM&authUsername=Zaphod
&authPassword=Beeblebrox&authDomain=Minor
&authHost=LightCity")问题是,我不知道如何使用NTLMv2发出请求。正式文件指出:
注意: camel-http基于HttpClient v3.x,因此对NTLMv1 ( NTLM协议的早期版本)的支持是有限的。它根本不支持NTLMv2。camel-http4 4支持NTLMv2。
当我尝试使用camel-http4 4时,它什么也不做:
from("activemq:{{queue.feedback}}")
.to("http4://localhost:8888/ntlm/secured?authMethodPriority=NTLM
&authMethod=NTLM&authUsername=Zaphod
&authPassword=Beeblebrox&authDomain=Minor
&authHost=LightCity")似乎camel-http4 4根本不知道NTLM。我试图调查camel-http4 4 基于GitHub的回购,除了文档之外,我找不到任何与NTLM相关的内容。
关于如何在Camel 2.19中使用NTLMv2的任何想法(其他版本的骆驼可能也很适合)?
发布于 2017-08-12 21:48:48
问题出在camel-http4组分中。默认情况下,它使用InputStreamEntity,它不是HttpEntity entity的可重复实现,这意味着一旦读取了流,它就关闭了,您就不能再读取它了。这会导致MainClientExec失败:
if (execCount > 1 && !RequestEntityProxy.isRepeatable(request)) {
throw new NonRepeatableRequestException("Cannot retry request with a non-repeatable request entity.");
}这似乎是一个错误,因此解决方法是在发送请求之前将InputStreamEntity转换为ByteArrayEntity (这是可重复的):
@Component
public class NtlmProcessor implements Processor {
@Override
public void process(Exchange exchange) throws Exception {
HttpEntity httpEntity = exchange.getIn().getBody(HttpEntity.class);
byte[] bytes = EntityUtils.toByteArray(httpEntity);
ByteArrayEntity byteArrayEntity = new ByteArrayEntity(bytes, ContentType.get(httpEntity));
exchange.getOut().setBody(byteArrayEntity);
}
}https://stackoverflow.com/questions/45082378
复制相似问题