当前位置: 首页 > 知识库问答 >
问题:

使用Apache Camel(Java DSL)拦截cxf web服务标头

岳硕
2023-03-14

我创建了一个Web服务客户端来使用apache camel处理cxf肥皂Web服务。

String serviceUri = "cxf:http://localhost:10000/myservice?serviceClass=" + 
    MyRequest.class.getCanonicalName();

from(uri).to("mock:xyz");

web服务接收soap调用,但引发异常,因为请求需要对wss进行处理。

org.apache.cxf.binding.soap.SoapFault:必须理解标头:[{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}安全性]不理解。

原因是,服务需要ws-security,这可以通过在请求时进行lloking来查看。

<SOAP-ENV:Header><wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" SOAP-ENV:mustUnderstand="1">

我发现我需要实现一个拦截器来处理标头属性。

我的问题:

>

  • 如何添加拦截器来处理CamelJava-DSL的标头属性?

    这是否足以消除SOAP故障?

  • 共有1个答案

    乔凯康
    2023-03-14

    您可以通过cxfEndpointConfigurer选项@参见:Camel CXF配置

    (我使用Spring(这要容易得多)),但我想对于DSL URI会如下所示:

    String serviceUri = "cxf:http://localhost:10000/myservice?serviceClass=" + 
    MyRequest.class.getCanonicalName() +
    "&cxfEndpointConfigurer="+ MyConfigurer.class.getCanonicalName();
    

    通过实施组织。阿帕奇。骆驼组成部分cxf。CxfEndpointConfigurer您可以在configureServer方法中添加拦截器

    server.getEndpoint().getInInterceptors().add(new MyJAASLoginInterceptor());
    

    如果使用JAAS(如JBOSS)在容器中运行Camel,则可以使用

    org.apache.cxf.interceptor.security.JAASLoginInterceptor
    

    带有所需的回调处理程序。针对JBOSS用户验证WSS标头中的用户/密码的简单示例:

    public class MyJAASLoginInterceptor extends javax.security.auth.callback.JAASLoginInterceptor {
    
      @Override
      protected CallbackHandler getCallbackHandler(String name, String password) {
    
        return new org.apache.cxf.interceptor.security.NamePasswordCallbackHandler(name, password, "setCredential");
    
      }
    
    }
    
     类似资料:
    • 我需要使用拦截器验证并记录grpc服务请求的一些数据。我检查了ServerInterceptor的interceptCall,但找不到获取请求对象的方法。有没有办法让请求对象进入拦截器?

    • 我在Spring上有一个拦截器,可以拦截用户的请求。我想计算申请的持续时间并保存到数据库中。然而,Spring不会自动连接我的豆子,导致服务上的空点异常。 这是代码: 我如何避免这个NPE?

    • 让我有一个这样的界面: 还有这样一个实现类: 现在我想使用bytebuddy创建一个拦截器/代理,它捕捉对setter的调用,存储更改后的值,并调用real方法。 最后,我想向拦截器/代理“询问”被调用的setter和更改的值。 我尝试了很多考虑也教程,但到目前为止,我发现没有工作的解决方案。也许有人可以帮助我。 这是拦截器: 以下是我当前的“测试”代码: 编辑:

    • 是否有办法在使用时监听 /metricsendpointhttps://quarkus.io/guides/micrometer? 我想收集一些需要调用不同API的指标。。。而不是制定时间表(https://quarkus.io/guides/scheduler-reference)... 例: 我在库伯内特斯API中查询一些自定义资源 然后我想用不同的标签更新一些仪表 首先,为我们提供了: 其次

    • 我需要将文件从文件夹同步到restendpoint。因此,如果文件被放置在特定文件夹中,我需要将该文件发送到接受多部分文件的RESTendpoint。我正在使用ApacheCamel来实现这一点。 RESTendpoint在Spring中编写,如下所示: 我是Camel的新手,并且已经弄清楚了如何通过构建路由并获取文件来轮询目录,但是我无法弄清楚如何使用此路由将此文件放入其余endpoint。这是

    • Spring的处理器映射机制包含了处理器拦截器。拦截器在你需要为特定类型的请求应用一些功能时可能很有用,比如,检查用户身份等。 处理器映射处理过程配置的拦截器,必须实现 org.springframework.web.servlet包下的 HandlerInterceptor接口。这个接口定义了三个方法: preHandle(..),它在处理器实际执行 之前 会被执行; postHandle(..