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

在CXF中向请求添加安全标头

彭朝
2023-03-14

我创建了一个基于wsdl文件的客户机。

    PrivateService ser = new PrivateService();

    PrivatePortType port = ser.getPrivateSOAPPort();
    BindingProvider bindingProvider = (BindingProvider) port;
    bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
            "http://192.168.4.48/PrivateSimulator/PrivateWebService.svc");

    bindingProvider.getRequestContext().put(BindingProvider.SOAPACTION_USE_PROPERTY, true);
    bindingProvider.getRequestContext().put(BindingProvider.SOAPACTION_URI_PROPERTY, "CreateParty");

    CreatePartyRequest createReq = new CreatePartyRequest();
    createReq.setParam("123456");
    createReq.setCallback("http://192.168.5.106:9999/Service");

    try {
        CreatePartyResponse resp = port.createParty(createReq);

        PartyInfo ci = resp.getPartyInfo();
        System.out.println(ci.getPartyId());

    } catch (WSException e) {

        e.printStackTrace();
    }

这可能是因为web服务是用C#编写的,而且最有可能的是,它需要oasis头,在其中存储用户名和密码值。

我现在能创造的新环境是:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
    <CreatePartyRequest xmlns="http://teleParty.QQQ.com/CCGW">
        <param>10000903</param>
        <callback>http://192.168.5.106:9999/Service</callback>
    </CreatePartyRequest>
</soap:Body>
</soap:Envelope>

所需的enevelope如下:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<s:Header>
    <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
        <o:UsernameToken u:Id="uuid-2aae5c05-19af-43e6-8814-7d7e7a306d4d-3">
            <o:Username>QQQ</o:Username>
            <o:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">QQQPass</o:Password>
        </o:UsernameToken>
    </o:Security>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <CreatePartyRequest xmlns="http://teleParty.QQQ.com/CCGW">
        <param>10000903</param>
        <callback>http://192.168.5.106:9999/Service</callback>
    </CreatePartyRequest>
</s:Body>
</s:Envelope>

共有1个答案

孙元明
2023-03-14

您需要添加WSS4JOutInterceptor+配置它以将UsernameToken添加到请求中。请参阅此处的“用户名令牌身份验证”部分:

http://cxf.apache.org/docs/ws-security.html

 类似资料:
  • 我正在使用Spring微服务构建微服务,我有两个相关的问题。 1。我在Api网关(即Zuul服务器)中有Spring安全性,现在Zuul不会转发任何请求,如果我已经从流中读取请求一次以身份验证(从POST请求中获取用户名/通行证) 如何读取请求,然后再次将相同的请求转发给下游服务? 2.Zuul没有转发request.set属性()到下游服务,所以一个解决办法是使用ctx.addZuulask e

  • 我使用的是Swagger 2.0和Swagger UI 3.0.3。 在我的api_定义中。yaml在我的路径之前有以下内容: 这将在Swagger UI中添加一个授权按钮,用户可以在其中粘贴他们的API密钥。我希望此API密钥在每个请求的请求标头中发送。但这不会发生,我不确定为什么。我错过了什么吗? 编辑: 请求似乎发出了,我回来了。 Chrome开发工具显示以下请求头: 我有路径设置为: 定义

  • 问题内容: 我正在与现有的servlet集成,该servlet从HTTP标头中提取一些属性。基本上,我实现的接口无法访问实际请求,它只能访问HTTP标头的k-> v映射。 我需要传递一个请求参数。计划是使用servlet过滤器从参数到标头值,但是HttpServletRequest对象当然没有addHeader()方法。 有任何想法吗? 问题答案: Extend ,覆盖标头吸气剂以返回参数: ..

  • 我正在尝试使用JQuery在Ajax中向请求添加头。 以下是代码:- 然后我使用了要求(要求是chrome火狐插件,我们可以手动添加一个标题到请求)。 手动添加标题后:- 在这两个pics请求头中,“ACCESS-CONTROL-request-HEADERS”中都有x-auth-token,但第二个pic中有“x-auth-token”头和头值,而第一个pic中没有。 所以我的问题是如何使用JQ

  • 我想用JAVA构建一个简单的soap客户机来调用soap JAVA web服务。所以我在我的项目中导入了WSDL,并构建了客户端。因此,如果我试图运行我的代码,我会遇到以下错误: AVVERTENZA:找不到所需的类(javax.activation.DataHandler和javax.mail.internet.MimeMultipart)。附件支持已禁用。AxisFault故障代码:{http

  • 我想在我的应用程序中使用spring cloud sleuth。对于每个请求,我都会在标头中获得“traceId”,我希望sleuth将其用作跟踪id。但问题是,sleuth仅在密钥为“X-B3-traceId”时才从标头中获取跟踪id。所以为了改变这一点,我使用了引用。但当我尝试构建应用程序时,我得到了以下结果: 在启动服务器时,我得到了以下信息: 我使用的是Spring boot版本--“2.