Apache CXF - javax.xml.ws.soap.SOAPFaultException:未定义任何安全操作

时间:2017-07-24 11:09:03

标签: java web-services cxf webservices-client cxf-client

尽管我设置了usernamepasswordactionWS Security Password Type (which is PasswordText),但在尝试调用Web服务的服务时会收到此异常:{{ 1}}。我尝试通信的Web服务使用No security action was defined使用Basic Authentication WS安全密码类型。

以下是我的尝试:

PasswordText

为了定义安全措施,还需要配置什么?

P.S。使用 Map<String, Object> ctx = ((BindingProvider) basicHttpBindingIDeneme).getRequestContext(); ctx.put("ws-security.username", USERNAME); ctx.put("ws-security.password", PASSWORD); Map<String,Object> inProps = new HashMap<String,Object>(); inProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT); inProps.put(WSHandlerConstants.ACTION, "UsernameToken"); WSS4JInInterceptor wssIn = new WSS4JInInterceptor(inProps); org.apache.cxf.endpoint.Client client = ClientProxy.getClient(basicHttpBindingIDeneme); org.apache.cxf.endpoint.Endpoint cxfEndpoint = client.getEndpoint(); cxfEndpoint.getInInterceptors().add(wssIn); Map<String,Object> outProps = new HashMap<String,Object>(); // how to configure the properties is outlined below; WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps); cxfEndpoint.getOutInterceptors().add(wssOut); 这是可用的最新版本。

2 个答案:

答案 0 :(得分:0)

您是否将安全拦截器添加到bean.xml?

<bean id="securityInterceptor" class="...BasicAuthAuthorizationInterceptor">
</bean>

    <jaxrs:server id="..." address="/">
        <jaxrs:serviceBeans>
            <ref bean="bean" />
        </jaxrs:serviceBeans>

        <jaxrs:inInterceptors>
            <ref bean="securityInterceptor" />
        </jaxrs:inInterceptors>

    </jaxrs:server>

答案 1 :(得分:0)

代码中的问题是您正在尝试调用Web服务,并且您添加的属性将在WSS4JInInterceptor中设置,而不是在WSS4JOutInterceptor中设置它们。

属性的定义应与此类似。

Because

您可以找到完整的代码示例here