On Mon, 2019-07-29 at 14:59 +0300, Petar Tahchiev wrote:
> This is my code:
> ```
> 
>     // Trust standard CA and those trusted by our custom strategy
>     final SSLContext sslcontext =
> SSLContexts.custom().loadTrustMaterial((chain, authType) ->
> true).build();
> 
>     int timeout = 5;
> 
>     PoolingAsyncClientConnectionManager ccm =
> PoolingAsyncClientConnectionManagerBuilder.create().setTlsStrategy(Cl
> ientTlsStrategyBuilder.create()
> 
> 
> .setSslContext(sslcontext)
> 
> 
> .setTlsVersions(TLS.V_1_3,
> 
> 
>            TLS.V_1_2)
> 
> 
> .setHostnameVerifier(
> 
> 
>            NoopHostnameVerifier.INSTANCE)
> 
> 
> .build())
> 
> 
> .setPoolConcurrencyPolicy(PoolConcurrencyPolicy.STRICT)
> 
>                  .setConnPoolPolicy(PoolReusePolicy.LIFO)
> 
> 
> .setConnectionTimeToLive(TimeValue.ofMinutes(1L)).build();
> 
>     try (CloseableHttpAsyncClient httpclient =
> HttpAsyncClients.custom().setConnectionManager(ccm).setDefaultRequest
> Config(
> 
> RequestConfig.custom().setConnectTimeout(Timeout.ofSeconds(timeout)).
> setResponseTimeout(Timeout.ofSeconds(timeout))
> 
> .setCookieSpec(CookieSpecs.STANDARD_STRICT.ident).build()).setVersion
> Policy(HttpVersionPolicy.FORCE_HTTP_2).build())
> {
> 
>         httpclient.start();
> 
> 
>     /*
>      * It can't be POST because the CSRF is triggered.
>      */
>         SimpleHttpRequest httpGet =
> SimpleHttpRequests.GET.create(restBaseUrl + "auth");
> 
>         LOG.debug("Calling: " + restBaseUrl + "auth");
> 
>         httpGet.setHeader("aaaa", username);
>         httpGet.setHeader("bbbb", password);
> 
>         Future<SimpleHttpResponse> future =
> httpclient.execute(httpGet, null);
> 
>         httpclient.shutdown(CloseMode.GRACEFUL);
> 
>         SimpleHttpResponse response = future.get();
> 
>         final String responseText = response.getBody().getBodyText();
>         ObjectMapper mapper = new ObjectMapper();
>         mapper.configure(JsonParser.Feature.AUTO_CLOSE_SOURCE, true);
>         UserData userData = mapper.readValue(responseText,
> UserData.class);
>         if (userData.getToken() == null) {
>             throw new BadCredentialsException("Invalid
> username/password");
>         }
> 
>         final ConsoleUserPrincipal principal =
>                         new
> ConsoleUserPrincipal(userData.getUsername(), password,
> AuthorityUtils.createAuthorityList(userData.getAuthorities()));
>         principal.setExpiryTime(userData.getExpiryTime());
>         principal.setToken(userData.getToken());
> 
>         return new UsernamePasswordAuthenticationToken(principal,
> password, principal.getAuthorities());
>     }
> } catch (NoSuchAlgorithmException | InterruptedException |
> ExecutionException | KeyManagementException | KeyStoreException |
> IOException e) {
>     LOG.error(e.getMessage(), e);
>     throw new InternalAuthenticationServiceException(e.getMessage());
> }
> 
> ```
> The exception happens after the httpClient shutdown on this line:
> 
>    SimpleHttpResponse response = future.get();
> 
> 

Looks correct to me.

Oleg


> 
> 
> На пн, 29.07.2019 г. в 14:57 ч. Petar Tahchiev <paranoia...@gmail.com
> >
> написа:
> 
> > Thank you Oleg,
> > it worked :). However now, once in a while I get this type of
> > error:
> > ````
> > Caused by: java.io.InterruptedIOException
> > at
> > org.apache.hc.client5.http.impl.async.AsyncConnectExec$2.cancelled(
> > AsyncConnectExec.java:213)
> > at
> > org.apache.hc.client5.http.impl.async.InternalHttpAsyncExecRuntime$
> > 2.cancelled(InternalHttpAsyncExecRuntime.java:233)
> > at
> > org.apache.hc.core5.concurrent.BasicFuture.cancel(BasicFuture.java:
> > 154)
> > at
> > org.apache.hc.core5.concurrent.ComplexFuture.cancel(ComplexFuture.j
> > ava:93)
> > at
> > org.apache.hc.core5.concurrent.BasicFuture.cancel(BasicFuture.java:
> > 161)
> > at
> > org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionMan
> > ager$2.cancelled(PoolingAsyncClientConnectionManager.java:395)
> > at
> > org.apache.hc.core5.concurrent.BasicFuture.cancel(BasicFuture.java:
> > 154)
> > at
> > org.apache.hc.core5.concurrent.ComplexFuture.cancel(ComplexFuture.j
> > ava:93)
> > at
> > org.apache.hc.core5.concurrent.BasicFuture.cancel(BasicFuture.java:
> > 161)
> > at
> > org.apache.hc.client5.http.impl.nio.DefaultAsyncClientConnectionOpe
> > rator$1.cancelled(DefaultAsyncClientConnectionOperator.java:111)
> > at
> > org.apache.hc.core5.concurrent.BasicFuture.cancel(BasicFuture.java:
> > 154)
> > at
> > org.apache.hc.core5.concurrent.ComplexFuture.cancel(ComplexFuture.j
> > ava:93)
> > at
> > org.apache.hc.core5.concurrent.BasicFuture.cancel(BasicFuture.java:
> > 161)
> > at
> > org.apache.hc.client5.http.impl.nio.MultihomeIOSessionRequester$1$1
> > .cancelled(MultihomeIOSessionRequester.java:147)
> > at
> > org.apache.hc.core5.concurrent.BasicFuture.cancel(BasicFuture.java:
> > 154)
> > at
> > org.apache.hc.core5.concurrent.BasicFuture.cancel(BasicFuture.java:
> > 161)
> > at
> > org.apache.hc.core5.reactor.IOSessionRequest.cancel(IOSessionReques
> > t.java:83)
> > at
> > org.apache.hc.core5.reactor.SingleCoreIOReactor.closePendingConnect
> > ionRequests(SingleCoreIOReactor.java:366)
> > at
> > org.apache.hc.core5.reactor.SingleCoreIOReactor.doTerminate(SingleC
> > oreIOReactor.java:101)
> > at
> > org.apache.hc.core5.reactor.AbstractSingleCoreIOReactor.execute(Abs
> > tractSingleCoreIOReactor.java:89)
> > at
> > org.apache.hc.core5.reactor.IOReactorWorker.run(IOReactorWorker.jav
> > a:44)
> > ````
> > Not always - most of the times it works fine, it is just sometimes.
> > 
> > 
> > На пн, 22.07.2019 г. в 12:43 ч. Oleg Kalnichevski <ol...@apache.org
> > >
> > написа:
> > 
> > > On Mon, 2019-07-22 at 12:29 +0300, Petar Tahchiev wrote:
> > > > Hello,
> > > > I have a Tomcat server running on port 8112 via HTTPS. The
> > > > Tomcat has
> > > > http2
> > > > enabled and is running with OpenJDK11.
> > > > Now when I try to connect with HTTPClient 5.0-beta5 I get this
> > > > exception:
> > > > ===================
> > > > 2019-07-22 12:22:57,699 [https-jsse-nio-8443-exec-2] INFO :
> > > > Recoverable I/O
> > > > exception (org.apache.hc.core5.http.NoHttpResponseException)
> > > > caught
> > > > when
> > > > processing request to {s}->https://localhost:8112
> > > > 2019-07-22 12:22:57,709 [https-jsse-nio-8443-exec-2] INFO :
> > > > Recoverable I/O
> > > > exception (org.apache.hc.core5.http.NoHttpResponseException)
> > > > caught
> > > > when
> > > > processing request to {s}->https://localhost:8112
> > > > 2019-07-22 12:22:57,719 [https-jsse-nio-8443-exec-2] INFO :
> > > > Recoverable I/O
> > > > exception (org.apache.hc.core5.http.NoHttpResponseException)
> > > > caught
> > > > when
> > > > processing request to {s}->https://localhost:8112
> > > > 2019-07-22 12:22:57,732 [https-jsse-nio-8443-exec-2] ERROR:
> > > > localhost:8112
> > > > failed to respond
> > > > org.apache.hc.core5.http.NoHttpResponseException:
> > > > localhost:8112
> > > > failed to
> > > > respond
> > > > at
> > > > org.apache.hc.core5.http.impl.io.DefaultHttpResponseParser.crea
> > > > teConn
> > > > ectionClosedException(DefaultHttpResponseParser.java:87)
> > > > at
> > > > org.apache.hc.core5.http.impl.io.AbstractMessageParser.parse(Ab
> > > > stract
> > > > MessageParser.java:243)
> > > > at
> > > > org.apache.hc.core5.http.impl.io.AbstractMessageParser.parse(Ab
> > > > stract
> > > > MessageParser.java:53)
> > > > at
> > > > org.apache.hc.core5.http.impl.io.DefaultBHttpClientConnection.r
> > > > eceive
> > > > ResponseHeader(DefaultBHttpClientConnection.java:187)
> > > > at
> > > > org.apache.hc.core5.http.impl.io.HttpRequestExecutor.execute(Ht
> > > > tpRequ
> > > > estExecutor.java:181)
> > > > at
> > > > org.apache.hc.core5.http.impl.io.HttpRequestExecutor.execute(Ht
> > > > tpRequ
> > > > estExecutor.java:224)
> > > > at
> > > > org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionM
> > > > anager
> > > > $InternalConnectionEndpoint.execute(PoolingHttpClientConnection
> > > > Manage
> > > > r.java:596)
> > > > at
> > > > org.apache.hc.client5.http.impl.classic.InternalExecRuntime.exe
> > > > cute(I
> > > > nternalExecRuntime.java:220)
> > > > at
> > > > org.apache.hc.client5.http.impl.classic.MainClientExec.execute(
> > > > MainCl
> > > > ientExec.java:107)
> > > > at
> > > > org.apache.hc.client5.http.impl.classic.ExecChainElement.execut
> > > > e(Exec
> > > > ChainElement.java:51)
> > > > at
> > > > org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proc
> > > > eed(Ex
> > > > ecChainElement.java:57)
> > > > at
> > > > org.apache.hc.client5.http.impl.classic.ConnectExec.execute(Con
> > > > nectEx
> > > > ec.java:181)
> > > > at
> > > > org.apache.hc.client5.http.impl.classic.ExecChainElement.execut
> > > > e(Exec
> > > > ChainElement.java:51)
> > > > at
> > > > org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proc
> > > > eed(Ex
> > > > ecChainElement.java:57)
> > > > at
> > > > org.apache.hc.client5.http.impl.classic.ProtocolExec.execute(Pr
> > > > otocol
> > > > Exec.java:165)
> > > > at
> > > > org.apache.hc.client5.http.impl.classic.ExecChainElement.execut
> > > > e(Exec
> > > > ChainElement.java:51)
> > > > at
> > > > org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proc
> > > > eed(Ex
> > > > ecChainElement.java:57)
> > > > at
> > > > org.apache.hc.client5.http.impl.classic.RetryExec.execute(Retry
> > > > Exec.j
> > > > ava:88)
> > > > at
> > > > org.apache.hc.client5.http.impl.classic.ExecChainElement.execut
> > > > e(Exec
> > > > ChainElement.java:51)
> > > > at
> > > > org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proc
> > > > eed(Ex
> > > > ecChainElement.java:57)
> > > > at
> > > > org.apache.hc.client5.http.impl.classic.RedirectExec.execute(Re
> > > > direct
> > > > Exec.java:116)
> > > > at
> > > > org.apache.hc.client5.http.impl.classic.ExecChainElement.execut
> > > > e(Exec
> > > > ChainElement.java:51)
> > > > at
> > > > org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proc
> > > > eed(Ex
> > > > ecChainElement.java:57)
> > > > at
> > > > org.apache.hc.client5.http.impl.classic.ContentCompressionExec.
> > > > execut
> > > > e(ContentCompressionExec.java:125)
> > > > at
> > > > org.apache.hc.client5.http.impl.classic.ExecChainElement.execut
> > > > e(Exec
> > > > ChainElement.java:51)
> > > > at
> > > > org.apache.hc.client5.http.impl.classic.InternalHttpClient.doEx
> > > > ecute(
> > > > InternalHttpClient.java:175)
> > > > at
> > > > org.apache.hc.client5.http.impl.classic.CloseableHttpClient.exe
> > > > cute(C
> > > > loseableHttpClient.java:77)
> > > > at
> > > > com.nemesis.console.backend.storefront.DefaultRestAuthenticatio
> > > > nProvi
> > > > der.authenticate(DefaultRestAuthenticationProvider.java:116)
> > > > ===================
> > > > 
> > > >  - If I change the URL from
> > > > https://localhost:8112/storefront/rest/auth to
> > > > https://some-website-with-valid-certificate.com/ it all works
> > > > fine.
> > > >  - If I change the Tomcat server to work with HTTP1.1 it all
> > > > works
> > > > fine.
> > > >  Here is my code:
> > > > ===================
> > > > 
> > > > try {
> > > >     // Trust standard CA and those trusted by our custom
> > > > strategy
> > > >     final SSLContext sslcontext =
> > > > SSLContexts.custom().loadTrustMaterial(new TrustStrategy() {
> > > > 
> > > >         @Override
> > > >         public boolean isTrusted(final X509Certificate[] chain,
> > > > final
> > > > String authType) throws CertificateException {
> > > >             return true;
> > > >         }
> > > > 
> > > >     }).build();
> > > > 
> > > >     int timeout = 5;
> > > > 
> > > >     RequestConfig config =
> > > > RequestConfig.custom().setResponseTimeout(timeout,
> > > > TimeUnit.SECONDS).setConnectTimeout(timeout,
> > > > TimeUnit.SECONDS).build();
> > > > 
> > > >     // Allow TLSv1.2 protocol only
> > > >     final SSLConnectionSocketFactory sslSocketFactory =
> > > > SSLConnectionSocketFactoryBuilder.create().setSslContext(sslcon
> > > > text).
> > > > setTlsVersions(TLS.V_1_2)
> > > > 
> > > > 
> > > > .setHostnameVerifier(NoopHostnameVerifier.INSTANCE).build();
> > > > 
> > > >     Registry<ConnectionSocketFactory> registry =
> > > > RegistryBuilder.<ConnectionSocketFactory>create().register("htt
> > > > ps",
> > > > sslSocketFactory).build();
> > > > 
> > > >     HttpClientConnectionManager ccm = new
> > > > PoolingHttpClientConnectionManager(registry);
> > > > 
> > > >     try (CloseableHttpClient httpclient =
> > > > HttpClients.custom().setRetryHandler(new
> > > > DefaultHttpRequestRetryHandler(3)).setDefaultRequestConfig(conf
> > > > ig)
> > > > 
> > > > .setConnectionManager(ccm).build()) {
> > > > 
> > > >         HttpGet httpGet = new HttpGet(restBaseUrl + "auth");
> > > > 
> > > >         LOG.debug("Calling: " + restBaseUrl + "auth");
> > > > 
> > > >         httpGet.setHeader("test", username);
> > > >         httpGet.setHeader("more-test", password);
> > > > 
> > > >         final HttpClientContext clientContext =
> > > > HttpClientContext.create();
> > > > 
> > > >         try (final CloseableHttpResponse response2 =
> > > > httpclient.execute(httpGet, clientContext)) {
> > > >             HttpEntity entity2 = response2.getEntity();
> > > >             final String response =
> > > > EntityUtils.toString(entity2,
> > > > Charset.defaultCharset());
> > > >             LOG.info(response);
> > > >         }
> > > >     }
> > > > } catch (NoSuchAlgorithmException | KeyManagementException |
> > > > ParseException | KeyStoreException | IOException e) {
> > > >     LOG.error(e.getMessage(), e);
> > > > }
> > > > 
> > > > =======================
> > > > 
> > > > Any clues will be appreciated.
> > > 
> > > Hi Petar
> > > 
> > > Classic HttpClient 5.0 support HTTP/1.1 version only. You need to
> > > migrate to HttpAsyncClient 5.0 to be able to use HTTP/2.
> > > 
> > > For migration instructions you can refer to this migration guide
> > > 
> > > https://ok2c.github.io/httpclient-migration-guide/
> > > 
> > > Oleg
> > > 
> > > 
> > > 
> > > 
> > > ---------------------------------------------------------------
> > > ------
> > > To unsubscribe, e-mail: 
> > > httpclient-users-unsubscr...@hc.apache.org
> > > For additional commands, e-mail: 
> > > httpclient-users-h...@hc.apache.org
> > > 
> > > 
> > 
> > --
> > Regards, Petar!
> > Karlovo, Bulgaria.
> > ---
> > Public PGP Key at:
> > 
http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x19658550C3110611
> > Key Fingerprint: A369 A7EE 61BC 93A3 CDFF  55A5 1965 8550 C311 0611
> > 
> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org
For additional commands, e-mail: httpclient-users-h...@hc.apache.org

Reply via email to