gpt4 book ai didi

java - Apache Camel v2.12 | CXF组件|基本认证

转载 作者:太空宇宙 更新时间:2023-11-04 07:06:45 25 4
gpt4 key购买 nike

尊敬的专家,

我正在尝试访问需要基本身份验证的 Web 服务。我可以使用 CXF 的 JaxWsDynamicClientFactory 进行访问。 auth 的代码片段如下所示:

JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient(ID_WSDL);

HTTPConduit conduit= (HTTPConduit) client.getConduit();
AuthorizationPolicy authorization = conduit.getAuthorization();
authorization.setUserName(USERNAME);
authorization.setPassword(PWD);

conduit.setAuthorization(authorization);

但是,当我尝试使用 Camel 的 CXF 组件访问同一个 Web 服务时,我收到 401 Unauthorized 错误,因为 Camel 没有将身份验证信息发送到 Web 服务。

我的路线如下:

from("file://c:/test?fileName=request.txt&noop=true").routeId("myrouteId")
.process(processor)
.to(cxf)
.to("log:{body}");

在我的处理器中,我设置凭据如下:

Map<String, Object> properties = new HashMap<String, Object>();

AuthorizationPolicy authPolicy = new AuthorizationPolicy();
authPolicy.setAuthorizationType(HttpAuthHeader.AUTH_TYPE_BASIC);
authPolicy.setUserName(USERNAME);
authPolicy.setPassword(PWD);

properties.put("org.apache.cxf.configuration.security.AuthorizationPolicy", authPolicy);
myEndpoint.setProperties(properties);

myEndpoint 是从 Exchange 检索的 CXFEndpoint。

我是否遗漏了什么或有什么问题。

还有类似的question 。因为我无法发表评论,所以我在那里提出了我的疑问作为答案。不过我的回答已经被删除了。因此,我提出一个新问题,希望能得到一些前进的方向。

感谢并感谢

最佳答案

在威廉的帮助下,我们得以实现这一目标。身份验证凭据需要传递到路由生成器中的 CXF 端点,而不是处理器中。这是 Williem 在 Camel 论坛上的解释:

If you set the cxfEndpoint property in a processor, it’s a setting of runtime. As the CxfProducer is created during the camel context start the route, the cxfEndpoint’s property is >not updated.

因此,要解决此问题,请将以下代码添加到路线生成器中:

Map<String, Object> properties = new HashMap<String, Object>(); 

AuthorizationPolicy authPolicy = new AuthorizationPolicy();
authPolicy.setAuthorizationType(HttpAuthHeader.AUTH_TYPE_BASIC);
authPolicy.setUserName(USERNAME);
authPolicy.setPassword(PWD);
authPolicy.setAuthorization("true");

//properties.put(AuthorizationPolicy.class.getName(), authPolicy);
properties.put("org.apache.cxf.configuration.security.AuthorizationPolicy", authPolicy);

CxfEndpoint myCxfEp = (CxfEndpoint)getContext().getEndpoint("cxf://");
myCxfEp.setProperties(properties);

此外,Apache Camel 2.12.3 版本引入了用于基本身份验证的用户名和密码选项。

关于java - Apache Camel v2.12 | CXF组件|基本认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21250540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com