我有两个 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 方法中有此代码。
似乎第一个调用的服务的凭据被缓存在某个地方,但我找不到它可能在哪里。我在这里看到了一个可能的解决方案,但我找不到WSClientConstants.CACHED_HTTP_STATE
定义的位置。这个 JIRA 问题中的评论似乎暗示它是其中的一部分,org.apache.axis2.transport.http.HTTPConstants
但它不存在。
规格:
- 轴版本:1.5.1
- Tomcat 版本:6.0.26
- Java版本:1.6.0_23