【问题标题】:Axis2 multiple connection authentication issueAxis2 多连接身份验证问题
【发布时间】:2012-06-22 20:38:12
【问题描述】:

我有两个 servlet,它们访问同一主机上的两个相应的 Axis2 Web 服务。其中一个 servlet 是只读的,而另一个则写入数据库。

每个 Axis2 Web 服务都使用 BASIC 身份验证。只读 Web 服务使用系统帐户,而写入 Web 服务使用用户凭据(作为 Web 表单的一部分提交)。

我遇到的问题是名为 second 的 servlet 总是无法对其 Web 服务进行身份验证。例如,我可以通过它的 servlet 查询只读服务,但是当我尝试使用写入服务时,却得到“401:需要授权”。如果我先调用写服务,当我尝试使用只读服务时,我会得到同样的错误。

这是我在 servlet 中设置连接凭据的方法:

Stub service = new Stub(serviceUrl);
HttpTransportProperties.Authenticator auth = new HttpTransportProperties.Authenticator();
auth.setUsername(username);
auth.setPassword(password);
auth.setPreemptiveAuthentication(true);

service._getServiceClient().getOptions().setProperty(HTTPConstants.AUTHENTICATE, auth);

访问只读服务的 servlet 在其构造函数中包含此代码。访问写服务的 servlet 在它的 doGet/doPost 方法中有这段代码。

似乎第一个调用的服务的凭据被缓存在某个地方,但我找不到它可能在哪里。我看到了一个可能的解决方案here,但我找不到WSClientConstants.CACHED_HTTP_STATE 的定义位置。 The comments in this JIRA issue 似乎暗示它是 org.apache.axis2.transport.http.HTTPConstants 的一部分,但它不存在。

具体说明:

  • 轴版本:1.5.1
  • Tomcat 版本:6.0.26
  • Java 版本:1.6.0_23

【问题讨论】:

    标签: web-services tomcat servlets axis2


    【解决方案1】:

    事实证明,到两个不同服务的连接使用相同的 JSESSIONID。因此,与第二个 Web 服务的连接试图使用为第一个 Web 服务进行身份验证的会话,从而导致错误。

    我的解决方案是为每个服务定义一个HttpClient,通过以下方式完成

    MultiThreadedHttpConnectionManager manager = new MuliThreadedHttpConnectionManager();
    HttpClient client = new HttpClient(manager);
    
    ConfigurationContext context = ConfigurationContextFactory.createDefaultConfigurationContext();
    context.setProperty(HTTPConstants.CACHED_HTTP_CLIENT, client);
    context.setProperty(HTTPConstants.REUSE_HTTP_CLIENT, true);
    
    Stub service = new Stub(context, serviceUrl);
    

    这允许两个 servlet 为其相应的服务拥有一个单独的会话。

    【讨论】:

      【解决方案2】:

      重点是创建一个专用的ConfigurationContext。

      在没有多线程连接工厂的情况下创建存根时,我使用默认配置上下文以更简单的方式解决了

      stub = new MyStub(ConfigurationContextFactory.createDefaultConfigurationContext(), myServicesUrl);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-09
        • 2021-11-22
        • 2023-03-03
        • 1970-01-01
        • 2011-08-17
        相关资源
        最近更新 更多