我在Android中編寫了一個應用程序,它使用了我創建的一些REST服務。這些Web服務不會發布標準的Apache Basic挑戰/響應。而是在服務器端代碼中,我想詢問來自HTTP(S)請求的用戶名和密碼,並將其與數據庫用戶進行比較,以確保他們可以運行該服務。正確使用HttpRequestInterceptor和CredentialsProvider與HttpClient進行搶先認證
我正在使用HttpClient做到這一點,我有初始登錄後存儲在客戶端的憑據(至少這是我看到這個工作)。所以這裏是我卡住的地方。 HttpClient下的搶先認證要求你設置一個攔截器作爲靜態成員。這是Apache Components使用的示例。
HttpRequestInterceptor preemptiveAuth = new HttpRequestInterceptor() {
@Override
public void process(final HttpRequest request, final HttpContext context) throws HttpException, IOException {
AuthState authState = (AuthState) context.getAttribute(ClientContext.TARGET_AUTH_STATE);
CredentialsProvider credsProvider = (CredentialsProvider) context.getAttribute(
ClientContext.CREDS_PROVIDER);
HttpHost targetHost = (HttpHost) context.getAttribute(ExecutionContext.HTTP_TARGET_HOST);
if (authState.getAuthScheme() == null) {
AuthScope authScope = new AuthScope(targetHost.getHostName(), targetHost.getPort());
Credentials creds = credsProvider.getCredentials(authScope);
if (creds != null) {
authState.setAuthScheme(new BasicScheme());
authState.setCredentials(creds);
}
}
}
};
所以問題就在於此。這將適當使用什麼?當應用程序啓動時,我會將它作爲應用程序的一部分嗎?將用戶名和密碼拉出內存,然後使用它們來創建此HttpRequestInterceptor使用的CredentialsProvider?還是有辦法更動態地做到這一點?
我得到它沒有搶先認證工作。結果是答案。謝謝。 – 2010-05-09 01:47:59