我有兩個servlet訪問同一主機上的兩個相應的Axis2 Web服務。其中一個servlet是隻讀的,另一個寫入數據庫。Axis2多連接身份驗證問題
每個Axis2 Web服務都使用BASIC身份驗證。只讀Web服務使用系統帳戶,而寫入Web服務使用用戶憑據(作爲Web表單的一部分提交)。
我遇到的問題是,名爲第二個的servlet始終未通過對其Web服務的身份驗證。例如,我可以通過它的servlet查詢只讀服務,但是當我嘗試使用寫入服務時,我得到了「401:Authorization Required」。如果我首先調用寫入服務,當我嘗試使用只讀服務時,會出現相同的錯誤。
這裏是我如何設置憑據在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