-
Type:
Bug
-
Resolution: Unresolved
-
Priority:
Minor
-
Component/s: ldap-plugin
-
None
-
Environment: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)