繁体   English   中英

如何使用基本身份验证配置 Camel CXF

[英]How to configure Camel CXF with Basic authentication

我是 Apache Camel 和 CXF 的新手,

我正在尝试创建一个路由来查询需要基本身份验证的远程 WS 并指定 Soap Action 标头。

我能够使用camel HTTP组件实现相同的功能,但我需要在java DSL中使用camel CXF实现相同的功能

任何人都可以指导我们修复相同的问题

如果你想使用camel-cxf组件来设置Basic认证,你需要像这样在CxfEndpoint上做一些配置。

CxfEndpoint cxfEndpoint = camelContext.getEndpoint(“cxf:xxx”); 
// set the authentication information 
Map<String, Object> properties = new HashMap<String, Object>(); 

org.apache.cxf.configuration.security.AuthorizationPolicy authPolicy = new AuthorizationPolicy(); 
authPolicy.setUserName(username); 
authPolicy.setPassword(password); 
properties.put(AuthorizationPolicy.class.getName(), authPolicy); 

cxfEndpoint.setProperties(properties);     

from(“xxx”).to(cxfEndpoint); 

在@Willem 的帮助下,能够完成这项工作。 身份验证凭据需要传递到路由构建器而不是处理器中的 CXF 端点。 正如 Williem 在 Camel 论坛上所解释的那样:

如果您在处理器中设置 cxfEndpoint 属性,则它是运行时的设置。 由于 CxfProducer 是在骆驼上下文启动路由期间创建的,因此 cxfEndpoint 的属性 > 未更新。

因此,要解决此问题,请将以下代码添加到 Route Builder:

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 版本中引入了用于基本身份验证的用户名和密码选项。

在当前版本的camel-cxf 中,直接在CxfEndpoint 上设置用户名和密码就足够了:

cxfEndpoint.setUsername("xyz");
csfEndpoint.setPassword("verySecure");

我刚刚查看了 CxfEndpoint 的代码,发现:

// setup the basic authentication property
if (ObjectHelper.isNotEmpty(username)) {
    AuthorizationPolicy authPolicy = new AuthorizationPolicy();
    authPolicy.setUserName(username);
    authPolicy.setPassword(password);
    factoryBean.getProperties().put(AuthorizationPolicy.class.getName(), authPolicy);
}

因此,如果您设置用户名,基本身份验证将如其他答案中所示进行配置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM