Java CXF Webservice服务器将请求凭据委托给内部Webservice调用

Java CXF Webservice服务器将请求凭据委托给内部Webservice调用,java,web-services,soap,jax-ws,cxf,Java,Web Services,Soap,Jax Ws,Cxf,如何将凭证(基本身份验证)从一个GET请求传递到另一个Web服务的新请求 我没有找到任何可以在单个请求中在拦截器之间共享数据的属性包 请澄清: 客户端[具有基本身份验证凭据]-->请求-->WS-1 **WS-1-->请求-->WS-2并从原始客户端传递凭据 **WS-1-->请求-->WS-3(无凭据) WS-1-->响应-->客户端 希望有了这个解决方案,我不会在几秒钟内运行。麻烦 我所做的: 在接收器中添加读取的凭据和远程ip AuthorizationPolicy policy

如何将凭证(基本身份验证)从一个GET请求传递到另一个Web服务的新请求

我没有找到任何可以在单个请求中在拦截器之间共享数据的属性包

请澄清:

  • 客户端[具有基本身份验证凭据]-->请求-->WS-1
  • **WS-1-->请求-->WS-2并从原始客户端传递凭据
  • **WS-1-->请求-->WS-3(无凭据)
  • WS-1-->响应-->客户端

    • 希望有了这个解决方案,我不会在几秒钟内运行。麻烦

      我所做的:

      在接收器中添加读取的凭据和远程ip

          AuthorizationPolicy policy = message.get(AuthorizationPolicy.class);
      
          if (policy == null) {
              sendErrorResponse(message, HttpURLConnection.HTTP_UNAUTHORIZED);
              return;
          }
      
      
          message.put("request_usr", policy.getUserName());
          message.put("request_pwd", policy.getPassword());
      
      操纵CXF生成的WebServiceClient来更改构造函数的返回值,如

      /**
       * 
       * @return returns WebServiceClass
       */
      @WebEndpoint(name = "WebServiceClassSoap")
      public WebServiceClassSoap getWebServiceClassSoap() {
          return dynamicAuthorisation(super.getPort(WebServiceClassSoap,
                  WebServiceClassSoap.class));
      } 
      
      private WebServiceClassSoap  dynamicAuthorisation (WebServiceClassSoap  service) {
          return dynamicAuthorisation(service, 
                      PhaseInterceptorChain.getCurrentMessage().get("request_usr").toString(),
                      PhaseInterceptorChain.getCurrentMessage().get("request_pwd").toString());
      }
      
      
      private WebServiceClassSoap  dynamicAuthorisation (WebServiceClassSoap  service, String username, String password) {
      
          Client client = ClientProxy.getClient(service);
          HTTPConduit http = (HTTPConduit) client.getConduit();
      
          AuthorizationPolicy auth = http.getAuthorization();
      
          auth.setUserName(username);
          auth.setPassword(password);
      
          http.setAuthorization(auth);
      
          return service;
      }
      
      在beans.xml中保留http conf:conductor

          <http-conf:conduit name="{http://schemas.foobar.com/websvc/WebServiceClass/}WebServiceClassSoap.http-conduit">
              <http-conf:authorization>
                      <!-- 
                      <sec:UserName>${webservices.username}@${webservices.domain}</sec:UserName>
                      <sec:Password>${webservices.password}</sec:Password>
                      -->
                      <sec:AuthorizationType>Basic</sec:AuthorizationType>
              </http-conf:authorization>
              <http-conf:client AllowChunking="false" ConnectionTimeout="30000" />            
      </http-conf:conduit>
      
      
      基本的
      
      感谢=)