Java 为https和身份验证配置CloseableHttpClient(4.3)

Java 为https和身份验证配置CloseableHttpClient(4.3),java,android,spring,apache-httpclient-4.x,Java,Android,Spring,Apache Httpclient 4.x,我正在尝试通过https将android应用程序连接到我的rest服务器。 服务器使用spring引导运行,spring安全性使用jdbcAuthentication运行。我很确定问题不是来自服务器端 在android应用程序中,我使用restTemplate创建一个restClient,如下所示: import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials


我正在尝试通过https将android应用程序连接到我的rest服务器。
服务器使用spring引导运行,spring安全性使用jdbcAuthentication运行。我很确定问题不是来自服务器端

在android应用程序中,我使用restTemplate创建一个restClient,如下所示:

 import org.apache.http.auth.AuthScope;
    import org.apache.http.auth.UsernamePasswordCredentials;
    import org.apache.http.client.CredentialsProvider;
    import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
    import org.apache.http.conn.ssl.SSLContextBuilder;
    import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
    import org.apache.http.impl.client.BasicCredentialsProvider;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
    import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
    import org.springframework.web.client.RestTemplate;

    import java.security.KeyManagementException;
    import java.security.KeyStoreException;
    import java.security.NoSuchAlgorithmException;

    public class RestClient extends RestTemplate {


        public RestClient(String username, String password) {
            CloseableHttpClient httpClient = null;

            try {
                SSLContextBuilder sslContextBuilder = new SSLContextBuilder();
                sslContextBuilder.loadTrustMaterial(null, new TrustSelfSignedStrategy());
                SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContextBuilder.build());
                CredentialsProvider credsProvider = new BasicCredentialsProvider();
                credsProvider.setCredentials(new AuthScope("localhost", 443, AuthScope.ANY_REALM), new UsernamePasswordCredentials(username, password));
                httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).setDefaultCredentialsProvider(credsProvider).build();
                getMessageConverters().add(new MappingJackson2HttpMessageConverter());
                setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient));

            } catch (NoSuchAlgorithmException e) {
                Log.e("NoSuchAlgorithmEx", e.getMessage());
            } catch (KeyStoreException e) {
                Log.e("KeyStoreException", e.getMessage());
            } catch (KeyManagementException e) {
                Log.e("KeyManagementException", e.getMessage());
            }
        }

        public static <T> T getItem(String url, Class<T> type, String username, String password) {
            RestClient restClient = new RestClient(username, password);
            return restClient.getForObject(url, type);
        }

    }
如果我在selectedUrl上使用.permitAll()禁用服务器端的身份验证,一切都很正常

如果启用身份验证,android应用程序将无法连接到服务器。 “无法提取响应:未找到适合响应类型的HttpMessageConverter”

在android方面,我使用的是

compile 'org.springframework.android:spring-android-rest-template:2.0.0.M1'
compile 'org.apache.httpcomponents:httpclient-android:4.3.5'
我认为问题来自于我的httpClient的配置,但我看不出具体是什么


如果你们有任何线索…

你能找到这个吗?
compile 'org.springframework.android:spring-android-rest-template:2.0.0.M1'
compile 'org.apache.httpcomponents:httpclient-android:4.3.5'