You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同时使用代理与身份验证时Axis2客户端抛出401未授权错误

Axis2客户端同时配置代理与服务端基础认证时出现401未授权问题

配置说明

基于Axis2官方快速入门的StockQuoteService示例开发服务客户端,新增以下配置:

  • 连接非localhost的远程服务端
  • 服务端基础身份认证配置(非NTLM认证,未使用证书):
// Authentication:
HttpTransportPropertiesImpl.Authenticator auth = new HttpTransportPropertiesImpl.Authenticator();

auth.setAllowedRetry(true);
auth.setUsername("wsuser");
auth.setPassword("wspass");

options.setProperty(HTTPConstants.AUTHENTICATE, auth);
  • 代理配置:
// Proxy:
HttpTransportProperties.ProxyProperties proxyProperties = new HttpTransportProperties.ProxyProperties();

proxyProperties.setProxyName("255.255.255.255");
proxyProperties.setProxyPort(0000);
proxyProperties.setUserName("proxyuser");
proxyProperties.setPassWord("proxypass");

options.setProperty(HTTPConstants.PROXY, proxyProperties);

问题现象

  • 仅启用代理(服务端关闭身份验证):客户端正常工作
  • 仅启用服务端身份验证(注释代理配置):客户端正常工作
  • 同时启用两者:抛出401未授权错误,错误栈如下:
org.apache.axis2.AxisFault: Transport error: 401 Error: Unauthorized
    at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:212)
    at org.apache.axis2.transport.http.AbstractHTTPTransportSender.writeMessageWithCommons(AbstractHTTPTransportSender.java:386)
    at org.apache.axis2.transport.http.AbstractHTTPTransportSender.invoke(AbstractHTTPTransportSender.java:214)
    at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:431)
    at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:399)
    at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:225)
    at org.apache.axis2.client.OperationClient.execute(OperationClient.java:150)
    at qt.axis2Clients.StockQuoteServiceStub.getPrice(StockQuoteServiceStub.java:153)
    at qt.axis2Clients.StQuClientAdb.getPrice(StQuClientAdb.java:105)
    at qt.axis2Clients.StQuClientAdb.main(StQuClientAdb.java:75)

该问题在HTTP和HTTPS场景下均会出现,浏览器可正常访问目标服务,服务端与代理的用户名密码均正确,怀疑是配置遗漏或Axis2自身兼容问题,寻求解决方案。

完整测试代码

public static void main(java.lang.String args[]) {
    try {
      // set Path to certificates:
      TrustStore.assureJssecacertsFile();
      TrustStore.setTrustStoreProperty();
      
      // Set path to 'axis.xml':
      File   axis2Xml = new File("static/webapps/axis2/WEB-INF/conf/axis2.xml");
      String absPath  = axis2Xml.getAbsolutePath();
      System.setProperty(Constants.AXIS2_CONF, absPath);
      
      // URL:
      StockQuoteServiceStub stub = new StockQuoteServiceStub(
          "https://"+ urlToServer +"/axis2/services/StockQuoteService");

      // options:
      Options options = stub._getServiceClient().getOptions();
      options.setProperty(HTTPConstants.CHUNKED, false);
      
      // Authentication:
      HttpTransportPropertiesImpl.Authenticator auth = new HttpTransportPropertiesImpl.Authenticator();
      
      auth.setAllowedRetry(true);
      auth.setUsername("wsuser");
      auth.setPassword("wspass");
      
      options.setProperty(HTTPConstants.AUTHENTICATE, auth);

      // Proxy:
      HttpTransportProperties.ProxyProperties proxyProperties = new HttpTransportProperties.ProxyProperties();
      
      proxyProperties.setProxyName("255.255.255.255");
      proxyProperties.setProxyPort(0000);
      proxyProperties.setUserName("proxyuser");
      proxyProperties.setPassWord("proxypass");
      
      options.setProperty(HTTPConstants.PROXY, proxyProperties);

      // execute:
      getPrice(stub);
      update(stub);
      getPrice(stub);

    } catch (Exception e) {
      e.printStackTrace();
      System.err.println("\n\n\n");
    }
  }

内容的提问来源于stack exchange,提问作者Ellolo17

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 21:48:23