-
Bug
-
Resolution: Unresolved
-
Minor
-
None
-
Jenkins 2.204.1
LDAP plugin 1.21
We have to switch Jenkins to use LDAPS with a manager DN. I've started a fresh
Jenkins installation like so:
$ java \ -Djavax.net.ssl.trustStore=$PWD/cacerts \ -Djavax.net.ssl.trustStorePassword=changeit \ -jar jenkins.war \ --httpPort=7777
The cacerts file contains the self signed certificate of the LDAPS server I'd
like to use.
$ getent hosts alpha.domain.windows 192.168.17.99 alpha.domain.windows 192.168.17.72 alpha.domain.windows
$ java \ -Djavax.net.ssl.trustStore=cacerts \ -Djavax.net.ssl.trustStorePassword=changeit \ SSLPoke \ 192.168.17.72 \ 636 Successfully connected
$ java \ -Djavax.net.ssl.trustStore=cacerts \ -Djavax.net.ssl.trustStorePassword=changeit \ SSLPoke \ 192.168.17.99 \ 636 Successfully connected
Then I've configured the following for "LDAP Server" in Jenkins, for
everything else I kept the defaults.
ldaps://alpha.domain.windows
This produces no error message on the config page as Jenkins seems to be able
to connect to that server and the self signed certificate is accepted, thanks
to the cacerts file.
Now when I use the "Test LDAP settings" it rarely succeeds, but most of the
time it fails with this error
LdapCallback;null; nested exception is javax.naming.PartialResultException [Root exception is javax.naming.CommunicationException: domain.windows:636 [Root exception is javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target]]
The strange thing is the domain.windows:636 which is not what I configured,
I've configured alpha.domain.windows:636.
domain.windows seems to resolve to all our active directory servers. They all
have different self signed certificates and I've only included the one from
alpha to the cacerts file.
*I think Jenkins should not connect to different LDAPS servers then the ones
configured.*
$ dig domain.windows ; <<>> DiG 9.9.4-RedHat-9.9.4-74.el7_6.1 <<>> domain.windows ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21140 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 17, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4000 ;; QUESTION SECTION: ;domain.windows. IN A ;; ANSWER SECTION: domain.windows. 600 IN A 192.168.17.14 domain.windows. 600 IN A 192.168.17.98 domain.windows. 600 IN A 192.168.17.99 domain.windows. 600 IN A 192.168.17.72 domain.windows. 600 IN A 192.168.12.40 domain.windows. 600 IN A 192.168.12.44 domain.windows. 600 IN A 192.168.14.11 domain.windows. 600 IN A 192.168.11.22 domain.windows. 600 IN A 192.168.11.118 domain.windows. 600 IN A 192.168.14.21 domain.windows. 600 IN A 192.168.14.76 domain.windows. 600 IN A 192.168.14.20 domain.windows. 600 IN A 192.168.11.108 domain.windows. 600 IN A 192.168.13.14 domain.windows. 600 IN A 192.168.18.4 domain.windows. 600 IN A 192.168.12.48 domain.windows. 600 IN A 192.168.13.15 ;; Query time: 0 msec ;; SERVER: 192.168.17.99#53(192.168.17.99) ;; WHEN: Mon Jan 13 09:19:13 CET 2020 ;; MSG SIZE rcvd: 313
$ dig domain.windows | grep ^domain.windows. | awk '{print $NF}' | xargs -n1 getent hosts | sort -k2 192.168.11.118 beta-2.loc2.company.com 192.168.11.108 beta.loc2.company.com 192.168.11.22 gamma.loc2.company.com 192.168.12.44 joest.loc3.company.com 192.168.13.14 epsilon.loc5.company.com 192.168.14.20 zeta-2.loc4.company.com 192.168.14.76 zeta.loc4.company.com 192.168.13.15 eta.loc5.company.com 192.168.17.99 alpha-2.loc1.company.com 192.168.17.72 alpha.loc1.company.com 192.168.12.40 theta-2.loc3.company.com 192.168.12.48 theta.loc3.company.com 192.168.14.21 iota-2.loc4.company.com 192.168.14.11 iota.loc4.company.com 192.168.17.98 kappa-2.loc1.company.com 192.168.17.14 kappa.loc1.company.com 192.168.18.4 lambda.loc4.company.com
Output from Jenkins below:
Running from: /local0/skirmess/jenkins.war webroot: $user.home/.jenkins 2020-01-13 08:15:14.251+0000 [id=1] INFO org.eclipse.jetty.util.log.Log#initialized: Logging initialized @486ms to org.eclipse.jetty.util.log.JavaUtilLog 2020-01-13 08:15:14.297+0000 [id=1] INFO winstone.Logger#logInternal: Beginning extraction from war file 2020-01-13 08:15:14.322+0000 [id=1] WARNING o.e.j.s.handler.ContextHandler#setContextPath: Empty contextPath 2020-01-13 08:15:14.371+0000 [id=1] INFO org.eclipse.jetty.server.Server#doStart: jetty-9.4.z-SNAPSHOT; built: 2019-05-02T00:04:53.875Z; git: e1bc35120a6617ee3df052294e433f3a25ce7097; jvm 11.0.1+13 2020-01-13 08:15:14.593+0000 [id=1] INFO o.e.j.w.StandardDescriptorProcessor#visitServlet: NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServlet 2020-01-13 08:15:14.629+0000 [id=1] INFO o.e.j.s.s.DefaultSessionIdManager#doStart: DefaultSessionIdManager workerName=node0 2020-01-13 08:15:14.629+0000 [id=1] INFO o.e.j.s.s.DefaultSessionIdManager#doStart: No SessionScavenger set, using defaults 2020-01-13 08:15:14.632+0000 [id=1] INFO o.e.j.server.session.HouseKeeper#startScavenging: node0 Scavenging every 660000ms WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by com.thoughtworks.xstream.core.util.Fields (file:/local0/skirmess/.jenkins/war/WEB-INF/lib/xstream-1.4.7-jenkins-1.jar) to field java.util.TreeMap.comparator WARNING: Please consider reporting this to the maintainers of com.thoughtworks.xstream.core.util.Fields WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release 2020-01-13 08:15:14.973+0000 [id=1] INFO hudson.WebAppMain#contextInitialized: Jenkins home directory: /u/skirmess/.jenkins found at: $user.home/.jenkins 2020-01-13 08:15:15.152+0000 [id=1] INFO o.e.j.s.handler.ContextHandler#doStart: Started w.@47a64f7d{Jenkins v2.204.1,/,file:///local0/skirmess/.jenkins/war/,AVAILABLE}{/u/skirmess/.jenkins/war} 2020-01-13 08:15:15.176+0000 [id=1] INFO o.e.j.server.AbstractConnector#doStart: Started ServerConnector@1bb5a082{HTTP/1.1,[http/1.1]}{0.0.0.0:7777} 2020-01-13 08:15:15.177+0000 [id=1] INFO org.eclipse.jetty.server.Server#doStart: Started @1413ms 2020-01-13 08:15:15.178+0000 [id=42] INFO winstone.Logger#logInternal: Winstone Servlet Engine v4.0 running: controlPort=disabled 2020-01-13 08:15:15.429+0000 [id=51] INFO jenkins.InitReactorRunner$1#onAttained: Started initialization 2020-01-13 08:15:15.725+0000 [id=63] INFO jenkins.InitReactorRunner$1#onAttained: Listed all plugins 2020-01-13 08:15:20.020+0000 [id=49] INFO jenkins.InitReactorRunner$1#onAttained: Prepared all plugins 2020-01-13 08:15:20.035+0000 [id=72] INFO jenkins.InitReactorRunner$1#onAttained: Started all plugins 2020-01-13 08:15:20.900+0000 [id=82] INFO h.ExtensionFinder$GuiceFinder$FaultTolerantScope$1#error: Failed to instantiate optional component hudson.plugins.build_timeout.operations.AbortAndRestartOperation$DescriptorImpl; skipping 2020-01-13 08:15:21.131+0000 [id=71] INFO jenkins.InitReactorRunner$1#onAttained: Augmented all extensions 2020-01-13 08:15:21.173+0000 [id=96] INFO jenkins.InitReactorRunner$1#onAttained: Loaded all jobs 2020-01-13 08:15:21.191+0000 [id=141] INFO hudson.model.AsyncPeriodicWork#lambda$doRun$0: Started Download metadata 2020-01-13 08:15:21.202+0000 [id=141] INFO hudson.model.AsyncPeriodicWork#lambda$doRun$0: Finished Download metadata. 9 ms 2020-01-13 08:15:21.233+0000 [id=105] INFO jenkins.InitReactorRunner$1#onAttained: Completed initialization 2020-01-13 08:15:21.344+0000 [id=34] WARNING j.branch.WorkspaceLocatorImpl#getWorkspaceRoot: JENKINS-2111 path sanitization ineffective when using legacy Workspace Root Directory ‘${ITEM_ROOTDIR}/workspace’; switch to ‘${JENKINS_HOME}/workspace/${ITEM_FULL_NAME}’ as in JENKINS-8446 / JENKINS-21942 2020-01-13 08:15:21.353+0000 [id=34] INFO hudson.WebAppMain$3#run: Jenkins is fully up and running 2020-01-13 08:15:55.510+0000 [id=35] INFO o.s.c.s.AbstractApplicationContext#prepareRefresh: Refreshing org.springframework.web.context.support.StaticWebApplicationContext@6177c18e: display name [Root WebApplicationContext]; startup date [Mon Jan 13 09:15:55 CET 2020]; root of context hierarchy 2020-01-13 08:15:55.511+0000 [id=35] INFO o.s.c.s.AbstractApplicationContext#obtainFreshBeanFactory: Bean factory for application context [org.springframework.web.context.support.StaticWebApplicationContext@6177c18e]: org.springframework.beans.factory.support.DefaultListableBeanFactory@2acf41c4 2020-01-13 08:15:55.519+0000 [id=35] INFO o.s.b.f.s.DefaultListableBeanFactory#preInstantiateSingletons: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@2acf41c4: defining beans [ldapUserSearch,authenticationManager,bindAuthenticator,authoritiesPopulator,initialDirContextFactory]; root of factory hierarchy 2020-01-13 08:15:55.532+0000 [id=35] INFO o.a.l.DefaultInitialDirContextFactory#setProviderUrl: URL 'ldaps://alpha.domain.windows/DC=Domain,DC=windows', root DN is 'DC=Domain,DC=windows' 2020-01-13 08:15:55.538+0000 [id=35] INFO o.a.l.s.FilterBasedLdapUserSearch#<init>: SearchBase not set. Searches will be performed from the root: DC=Domain,DC=windows 2020-01-13 08:15:55.549+0000 [id=35] INFO o.a.p.l.p.DefaultLdapAuthoritiesPopulator#setGroupSearchBase: groupSearchBase is empty. Searches will be performed from the root: DC=Domain,DC=windows 2020-01-13 08:15:55.786+0000 [id=35] WARNING h.s.LDAPSecurityRealm$LDAPAuthenticationManager#authenticate: Failed communication with ldap server. sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at java.base/sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141) at java.base/sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) at java.base/java.security.cert.CertPathBuilder.build(CertPathBuilder.java:297) at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380) Caused: sun.security.validator.ValidatorException: PKIX path building failed at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:385) at java.base/sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:290) at java.base/sun.security.validator.Validator.validate(Validator.java:264) at java.base/sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:321) at java.base/sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:221) at java.base/sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:129) at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:626) Caused: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:128) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:321) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:264) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:259) at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:642) at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.onCertificate(CertificateMessage.java:461) at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.consume(CertificateMessage.java:361) at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:392) at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:444) at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:421) at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:178) at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:164) at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1152) at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1063) at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:402) at java.naming/com.sun.jndi.ldap.Connection.createSocket(Connection.java:348) at java.naming/com.sun.jndi.ldap.Connection.<init>(Connection.java:216) at java.naming/com.sun.jndi.ldap.LdapClient.<init>(LdapClient.java:137) at java.naming/com.sun.jndi.ldap.LdapClient.getInstance(LdapClient.java:1616) at java.naming/com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2752) at java.naming/com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:320) at java.naming/com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:192) at java.naming/com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:151) at java.naming/com.sun.jndi.url.ldap.ldapURLContextFactory.getObjectInstance(ldapURLContextFactory.java:52) at java.naming/javax.naming.spi.NamingManager.getURLObject(NamingManager.java:608) at java.naming/javax.naming.spi.NamingManager.processURL(NamingManager.java:385) at java.naming/javax.naming.spi.NamingManager.processURLAddrs(NamingManager.java:365) at java.naming/javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:337) at java.naming/com.sun.jndi.ldap.LdapReferralContext.<init>(LdapReferralContext.java:119) Caused: javax.naming.CommunicationException: domain.windows:636 [Root exception is javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target] at java.naming/com.sun.jndi.ldap.LdapReferralContext.<init>(LdapReferralContext.java:96) at java.naming/com.sun.jndi.ldap.LdapReferralException.getReferralContext(LdapReferralException.java:151) at java.naming/com.sun.jndi.ldap.AbstractLdapNamingEnumeration.hasMoreReferrals(AbstractLdapNamingEnumeration.java:325) at java.naming/com.sun.jndi.ldap.AbstractLdapNamingEnumeration.hasMoreImpl(AbstractLdapNamingEnumeration.java:227) Caused: javax.naming.PartialResultException [Root exception is javax.naming.CommunicationException: domain.windows:636 [Root exception is javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target]] at java.naming/com.sun.jndi.ldap.AbstractLdapNamingEnumeration.hasMoreImpl(AbstractLdapNamingEnumeration.java:237) at java.naming/com.sun.jndi.ldap.AbstractLdapNamingEnumeration.hasMore(AbstractLdapNamingEnumeration.java:189) at org.acegisecurity.ldap.LdapTemplate$3.doInDirContext(LdapTemplate.java:257) at org.acegisecurity.ldap.LdapTemplate.execute(LdapTemplate.java:126) Caused: org.acegisecurity.ldap.LdapDataAccessException: LdapCallback;null; nested exception is javax.naming.PartialResultException [Root exception is javax.naming.CommunicationException: domain.windows:636 [Root exception is javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target]] at org.acegisecurity.ldap.LdapTemplate$LdapExceptionTranslator.translate(LdapTemplate.java:295) at org.acegisecurity.ldap.LdapTemplate.execute(LdapTemplate.java:128) at org.acegisecurity.ldap.LdapTemplate.searchForSingleEntry(LdapTemplate.java:246) at org.acegisecurity.ldap.search.FilterBasedLdapUserSearch.searchForUser(FilterBasedLdapUserSearch.java:119) at org.acegisecurity.providers.ldap.authenticator.BindAuthenticator.authenticate(BindAuthenticator.java:71) at org.acegisecurity.providers.ldap.authenticator.BindAuthenticator2.authenticate(BindAuthenticator2.java:49) at org.acegisecurity.providers.ldap.LdapAuthenticationProvider.retrieveUser(LdapAuthenticationProvider.java:233) Caused: org.acegisecurity.AuthenticationServiceException: LdapCallback;null; nested exception is javax.naming.PartialResultException [Root exception is javax.naming.CommunicationException: domain.windows:636 [Root exception is javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target]]; nested exception is org.acegisecurity.ldap.LdapDataAccessException: LdapCallback;null; nested exception is javax.naming.PartialResultException [Root exception is javax.naming.CommunicationException: domain.windows:636 [Root exception is javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target]] at org.acegisecurity.providers.ldap.LdapAuthenticationProvider.retrieveUser(LdapAuthenticationProvider.java:238) at org.acegisecurity.providers.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:122) at org.acegisecurity.providers.ProviderManager.doAuthentication(ProviderManager.java:200) at org.acegisecurity.AbstractAuthenticationManager.authenticate(AbstractAuthenticationManager.java:47) at hudson.security.LDAPSecurityRealm$LDAPAuthenticationManager.authenticate(LDAPSecurityRealm.java:1019) at hudson.security.LDAPSecurityRealm$DescriptorImpl.validate(LDAPSecurityRealm.java:1681) at hudson.security.LDAPSecurityRealm$DescriptorImpl.doValidate(LDAPSecurityRealm.java:1617) at java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:710) at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:396) at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:408) at org.kohsuke.stapler.interceptor.RequirePOST$Processor.invoke(RequirePOST.java:77) at org.kohsuke.stapler.PreInvokeInterceptedFunction.invoke(PreInvokeInterceptedFunction.java:26) at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:212) at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:145) at org.kohsuke.stapler.MetaClass$11.doDispatch(MetaClass.java:535) at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:747) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:878) at org.kohsuke.stapler.MetaClass$4.doDispatch(MetaClass.java:280) at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:747) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:878) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:676) at org.kohsuke.stapler.Stapler.service(Stapler.java:238) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:873) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1623) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:154) at jenkins.security.ResourceDomainFilter.doFilter(ResourceDomainFilter.java:76) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at jenkins.telemetry.impl.UserLanguages$AcceptLanguageFilter.doFilter(UserLanguages.java:128) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:157) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610) at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:64) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84) at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:90) at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610) at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610) at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610) at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:540) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1700) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1345) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:480) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1667) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1247) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) at org.eclipse.jetty.server.Server.handle(Server.java:505) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:370) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:267) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103) at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:132) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:698) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:804) at java.base/java.lang.Thread.run(Thread.java:834)