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

时间:2014-01-06 10:41:07

标签: java cxf apache-camel

我是Apache Camel和CXF的新手,

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

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

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

3 个答案:

答案 0 :(得分:2)

如果你想使用camel-cxf组件来设置基本身份验证,你需要在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); 

答案 1 :(得分:1)

在@Willem的帮助下,能够使这个工作。身份验证凭据需要传递到Route Builder中的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的版本2.12.3中,Camel引入了用于基本身份验证的用户名和密码选项。

答案 2 :(得分:0)

在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);
}

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