Java 如何使用基本身份验证配置Camel CXF
我是Apache Camel和CXF的新手 我正在尝试创建一个路由,用于查询需要基本身份验证的远程WS,并指定Soap操作头 我可以使用camel-HTTP组件实现同样的功能,但camel-CXF也需要同样的功能 在JavaDSL中Java 如何使用基本身份验证配置Camel CXF,java,cxf,apache-camel,Java,Cxf,Apache Camel,我是Apache Camel和CXF的新手 我正在尝试创建一个路由,用于查询需要基本身份验证的远程WS,并指定Soap操作头 我可以使用camel-HTTP组件实现同样的功能,但camel-CXF也需要同样的功能 在JavaDSL中 有谁能指导我们修复相同的如果您想使用camel cxf组件来设置基本身份验证,您需要在CxfEndpoint上进行如下配置 CxfEndpoint cxfEndpoint = camelContext.getEndpoint(“cxf:xxx”); // set
有谁能指导我们修复相同的如果您想使用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);
CxfEndpoint CxfEndpoint=camelContext.getEndpoint(“cxf:xxx”);
//设置身份验证信息
映射属性=新的HashMap();
org.apache.cxf.configuration.security.AuthorizationPolicy authPolicy=新的AuthorizationPolicy();
authPolicy.setUserName(用户名);
authPolicy.setPassword(密码);
properties.put(AuthorizationPolicy.class.getName(),authPolicy);
cxfEndpoint.setProperties(属性);
从(“xxx”)到(cxpoint);
在@Willem的帮助下,我们成功地实现了这一目标。身份验证凭据需要传递到路由生成器中的CXF端点,而不是处理器中。这是威廉在骆驼论坛上解释的:
如果在处理器中设置cxfEndpoint属性,则它是运行时的设置。
由于CxfProducer是在骆驼上下文启动路由期间创建的,因此cxfEndpoint的属性>未更新
因此,要解决此问题,请向管线生成器添加以下代码:
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);
Map properties=newhashmap();
AuthorizationPolicy authPolicy=新的AuthorizationPolicy();
authPolicy.setAuthorizationType(HttpAuthHeader.AUTH_TYPE_BASIC);
authPolicy.setUserName(用户名);
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(属性);
此外,在2.12.3版的Apache Camel中引入了用于基本身份验证的用户名和密码选项。在当前版本的Camel cxf中,直接在cxf上设置用户名和密码就足够了:
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);
}
因此,如果您设置username,基本身份验证将按照其他答案中所示进行配置。您只需创建一个POJO来调用服务,并将其用作路由中的bean。POJO本身可能包含f.e.a,它对响应表示感谢,您能否为我们提供一些示例代码,以实现相同的eg for http组件,我们有authMethod=Basic-->(“direct:routes”)。为了(“);我们可以为CXF WebClient EAH提供一个与上面类似的示例吗?您可以在CXF端点uri上设置username、password选项,就像”cxf://bean:myservice?username=user1&password=pass“在骆驼2.13.x中。