NoSuchMethodError after Update Jenkins from Version 2.462.3 to 2.479.3

Jenkins Setup:

  • Version 2.479.3
  • Role based permissions
  • with ldap

Question:

Hello everyone,

After updating Jenkins from version 2.462.3 to 2.479.3, the well-known “evil jenkins” error page is displayed after every login. The URL in the browser heading points to [host]:8080/j_spring_security_check.

At the same time, a warning is logged in the error log (see attached log). Every time I try to log in this warning is logged again.

I hope you can help me find the error. Thank you in advance.

Since I can’t upload files, here is the log as qoute:

2025-01-22 10:01:50.161+0000 [id=108]	INFO	hudson.lifecycle.Lifecycle#onStatusUpdate: Jenkins stopped
2025-01-22 10:01:53.451+0000 [id=1]	INFO	winstone.Logger#logInternal: Beginning extraction from war file
2025-01-22 10:02:16.484+0000 [id=1]	WARNING	o.e.j.ee9.nested.ContextHandler#setContextPath: Empty contextPath
2025-01-22 10:02:16.562+0000 [id=1]	INFO	org.eclipse.jetty.server.Server#doStart: jetty-12.0.16; built: 2024-12-09T21:02:54.535Z; git: c3f88bafb4e393f23204dc14dc57b042e84debc7; jvm 17.0.9+8-LTS
2025-01-22 10:02:20.473+0000 [id=1]	INFO	o.e.j.e.w.StandardDescriptorProcessor#visitServlet: NO JSP Support for /, did not find org.eclipse.jetty.ee9.jsp.JettyJspServlet
2025-01-22 10:02:20.536+0000 [id=1]	INFO	o.e.j.s.DefaultSessionIdManager#doStart: Session workerName=node0
2025-01-22 10:02:21.114+0000 [id=1]	INFO	hudson.WebAppMain#contextInitialized: Jenkins home directory: C:\Jenkins found at: EnvVars.masterEnvVars.get("JENKINS_HOME")
2025-01-22 10:02:21.270+0000 [id=1]	INFO	o.e.j.s.handler.ContextHandler#doStart: Started oeje9n.ContextHandler$CoreContextHandler@1b7cae6f{Jenkins v2.479.3,/,b=file:///C:/Jenkins/war/,a=AVAILABLE,h=oeje9n.ContextHandler$CoreContextHandler$CoreToNestedHandler@21f8e55f{STARTED}}
2025-01-22 10:02:21.286+0000 [id=1]	INFO	o.e.j.server.AbstractConnector#doStart: Started ServerConnector@3533df16{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
2025-01-22 10:02:21.301+0000 [id=1]	INFO	org.eclipse.jetty.server.Server#doStart: Started oejs.Server@27d4a09{STARTING}[12.0.16,sto=0] @28855ms
2025-01-22 10:02:21.301+0000 [id=25]	INFO	winstone.Logger#logInternal: Winstone Servlet Engine running: controlPort=disabled
2025-01-22 10:02:21.571+0000 [id=30]	INFO	hudson.PluginManager#loadDetachedPlugins: Upgrading Jenkins. The last running version was 2.462.3. This Jenkins is version 2.479.3.
2025-01-22 10:02:21.604+0000 [id=31]	INFO	jenkins.InitReactorRunner$1#onAttained: Started initialization
2025-01-22 10:02:21.713+0000 [id=30]	INFO	hudson.PluginManager#loadDetachedPlugins: Upgraded Jenkins from version 2.462.3 to version 2.479.3. Loaded detached plugins (and dependencies): []
2025-01-22 10:02:21.963+0000 [id=40]	INFO	jenkins.InitReactorRunner$1#onAttained: Listed all plugins
2025-01-22 10:02:27.976+0000 [id=33]	INFO	jenkins.InitReactorRunner$1#onAttained: Prepared all plugins
2025-01-22 10:02:28.013+0000 [id=33]	INFO	jenkins.InitReactorRunner$1#onAttained: Started all plugins
2025-01-22 10:02:28.020+0000 [id=40]	INFO	jenkins.InitReactorRunner$1#onAttained: Augmented all extensions
2025-01-22 10:02:28.287+0000 [id=37]	WARNING	o.j.p.s.scripts.ScriptApproval#load: There are 6 deprecated approved script hashes and 0 deprecated approved classpath hashes. They will be rehashed upon next use and that may cause performance issues until all of them are converted or removed.
2025-01-22 10:02:28.297+0000 [id=39]	INFO	o.s.s.l.DefaultSpringSecurityContextSource#<init>: Configure with URL ldap://[+++removed+++]
2025-01-22 10:02:28.344+0000 [id=39]	INFO	o.s.s.l.s.FilterBasedLdapUserSearch#<init>: Searches will be performed from the root [+++removed+++] since SearchBase not set
2025-01-22 10:02:28.450+0000 [id=39]	INFO	o.s.s.l.u.DefaultLdapAuthoritiesPopulator#<init>: Will perform group search from the context source base since groupSearchBase is empty.
2025-01-22 10:02:28.498+0000 [id=37]	INFO	h.p.b.g.GlobalTimeOutConfiguration#load: global timeout not set
2025-01-22 10:02:29.542+0000 [id=39]	INFO	jenkins.InitReactorRunner$1#onAttained: System config loaded
2025-01-22 10:02:29.644+0000 [id=35]	INFO	jenkins.InitReactorRunner$1#onAttained: System config adapted
2025-01-22 10:02:30.005+0000 [id=41]	INFO	jenkins.InitReactorRunner$1#onAttained: Loaded all jobs
2025-01-22 10:02:30.006+0000 [id=37]	INFO	o.j.p.l.NodesMirror#createNodeResources: lockable-resources-plugin: configure node resources
2025-01-22 10:02:30.023+0000 [id=35]	INFO	jenkins.InitReactorRunner$1#onAttained: Configuration for all jobs updated
2025-01-22 10:02:30.124+0000 [id=35]	INFO	jenkins.InitReactorRunner$1#onAttained: Completed initialization
2025-01-22 10:02:30.219+0000 [id=24]	INFO	hudson.lifecycle.Lifecycle#onReady: Jenkins is fully up and running
2025-01-22 10:02:31.005+0000 [id=56]	WARNING	h.m.DownloadService$Downloadable#updateNow: No tool installer metadata found for jenkins.plugins.nodejs.tools.MirrorNodeJSInstaller
2025-01-22 10:54:41.896+0000 [id=15]	WARNING	h.i.i.InstallUncaughtExceptionHandler#handleException: Caught unhandled exception with ID 06e534ed-e0d4-4bb0-907a-c9447585f9c8
java.lang.NoSuchMethodError: 'void org.springframework.util.Assert.isTrue(boolean)'
	at PluginClassLoader for ldap//org.springframework.ldap.support.LdapUtils$CollectingAttributeValueCallbackHandler.handleAttributeValue(LdapUtils.java:343)
	at PluginClassLoader for ldap//org.springframework.ldap.support.LdapUtils.handleAttributeValue(LdapUtils.java:321)
	at PluginClassLoader for ldap//org.springframework.ldap.support.LdapUtils.iterateAttributeValues(LdapUtils.java:305)
	at PluginClassLoader for ldap//org.springframework.ldap.support.LdapUtils.collectAttributeValues(LdapUtils.java:287)
	at PluginClassLoader for ldap//org.springframework.ldap.core.DirContextAdapter.collectAttributeValuesAsList(DirContextAdapter.java:787)
	at PluginClassLoader for ldap//org.springframework.ldap.core.DirContextAdapter.getObjectAttributes(DirContextAdapter.java:776)
	at PluginClassLoader for ldap//org.springframework.security.ldap.SpringSecurityLdapTemplate.extractStringAttributeValues(SpringSecurityLdapTemplate.java:224)
	at PluginClassLoader for ldap//org.springframework.security.ldap.SpringSecurityLdapTemplate.lambda$searchForMultipleAttributeValues$2(SpringSecurityLdapTemplate.java:187)
	at PluginClassLoader for ldap//org.springframework.ldap.core.ContextMapperCallbackHandler.getObjectFromNameClassPair(ContextMapperCallbackHandler.java:69)
	at PluginClassLoader for ldap//org.springframework.ldap.core.CollectingNameClassPairCallbackHandler.handleNameClassPair(CollectingNameClassPairCallbackHandler.java:50)
	at PluginClassLoader for ldap//org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:371)
	at PluginClassLoader for ldap//org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:332)
	at PluginClassLoader for ldap//org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:633)
	at PluginClassLoader for ldap//org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:574)
	at PluginClassLoader for ldap//org.springframework.security.ldap.SpringSecurityLdapTemplate.searchForMultipleAttributeValues(SpringSecurityLdapTemplate.java:197)
	at PluginClassLoader for ldap//org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator.getGroupMembershipRoles(DefaultLdapAuthoritiesPopulator.java:223)
	at PluginClassLoader for ldap//hudson.security.LDAPSecurityRealm$AuthoritiesPopulatorImpl.getGroupMembershipRoles(LDAPSecurityRealm.java:1427)
	at PluginClassLoader for ldap//org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator.getGrantedAuthorities(DefaultLdapAuthoritiesPopulator.java:202)
	at PluginClassLoader for ldap//jenkins.security.plugins.ldap.FromGroupSearchLDAPGroupMembershipStrategy.getGrantedAuthorities(FromGroupSearchLDAPGroupMembershipStrategy.java:81)
	at PluginClassLoader for ldap//hudson.security.LDAPSecurityRealm$WrappedAuthoritiesPopulator.getGrantedAuthorities(LDAPSecurityRealm.java:1380)
	at PluginClassLoader for ldap//org.springframework.security.ldap.authentication.LdapAuthenticationProvider.loadUserAuthorities(LdapAuthenticationProvider.java:197)
	at PluginClassLoader for ldap//org.springframework.security.ldap.authentication.AbstractLdapAuthenticationProvider.authenticate(AbstractLdapAuthenticationProvider.java:81)
	at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:182)
	at PluginClassLoader for ldap//hudson.security.LDAPSecurityRealm$LDAPAuthenticationManager.authenticate(LDAPSecurityRealm.java:992)
	at org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter.attemptAuthentication(UsernamePasswordAuthenticationFilter.java:85)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:231)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:221)
	at hudson.security.ChainedServletFilter2$1.doFilter(ChainedServletFilter2.java:99)
	at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:98)
	at hudson.security.ChainedServletFilter2$1.doFilter(ChainedServletFilter2.java:99)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:117)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
	at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:63)
	at hudson.security.ChainedServletFilter2$1.doFilter(ChainedServletFilter2.java:99)
	at hudson.security.ChainedServletFilter2.doFilter(ChainedServletFilter2.java:111)
	at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:173)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.FilterHolder.doFilter(FilterHolder.java:202)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1638)
	at org.kohsuke.stapler.UncaughtExceptionFilter.doFilter(UncaughtExceptionFilter.java:26)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.FilterHolder.doFilter(FilterHolder.java:202)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1638)
	at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:86)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.FilterHolder.doFilter(FilterHolder.java:202)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1638)
	at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:31)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.FilterHolder.doFilter(FilterHolder.java:202)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1638)
	at jenkins.security.SuspiciousRequestFilter.doFilter(SuspiciousRequestFilter.java:38)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.FilterHolder.doFilter(FilterHolder.java:202)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1638)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.ServletHandler.doHandle(ServletHandler.java:526)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ScopedHandler.handle(ScopedHandler.java:127)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.security.SecurityHandler.handle(SecurityHandler.java:574)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.HandlerWrapper.handle(HandlerWrapper.java:124)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ScopedHandler.nextHandle(ScopedHandler.java:197)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.SessionHandler.doHandle(SessionHandler.java:612)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ScopedHandler.nextHandle(ScopedHandler.java:195)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ContextHandler.doHandle(ContextHandler.java:1037)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ScopedHandler.nextScope(ScopedHandler.java:164)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.ServletHandler.doScope(ServletHandler.java:483)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ScopedHandler.nextScope(ScopedHandler.java:162)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.SessionHandler.doScope(SessionHandler.java:589)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ScopedHandler.nextScope(ScopedHandler.java:162)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ContextHandler.doScope(ContextHandler.java:958)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ScopedHandler.handle(ScopedHandler.java:125)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ContextHandler.handle(ContextHandler.java:1696)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.HttpChannel$RequestDispatchable.dispatch(HttpChannel.java:1564)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.HttpChannel.dispatch(HttpChannel.java:723)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.HttpChannel.handle(HttpChannel.java:511)
	at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ContextHandler$CoreContextHandler$CoreToNestedHandler.handle(ContextHandler.java:2873)
	at Jenkins Main ClassLoader//org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1060)
	at Jenkins Main ClassLoader//org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:611)
	at Jenkins Main ClassLoader//org.eclipse.jetty.server.Server.handle(Server.java:182)
	at Jenkins Main ClassLoader//org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:662)
	at Jenkins Main ClassLoader//org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:418)
	at Jenkins Main ClassLoader//org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:322)
	at Jenkins Main ClassLoader//org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:99)
	at Jenkins Main ClassLoader//org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
	at Jenkins Main ClassLoader//org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:480)
	at Jenkins Main ClassLoader//org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:443)
	at Jenkins Main ClassLoader//org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:293)
	at Jenkins Main ClassLoader//org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.produce(AdaptiveExecutionStrategy.java:195)
	at Jenkins Main ClassLoader//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:979)
	at Jenkins Main ClassLoader//org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1209)
	at Jenkins Main ClassLoader//org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1164)
	at java.base/java.lang.Thread.run(Thread.java:840)

I got caught by this myself because I failed to read the upgrade guide ahead of time.

Spring Security got a major update and there are extra steps involved in upgrading to 2.479+