Hi,

I'm in the early stages of analysing this problem:

   - Tomcat Embedded 9.0.37 with clustering enabled
   - SpringBoot application, 2.1.16
   - Login with no existing JSESSIONID fails

I can see the following code is executed twice within one request, the
login attempt:

*~/.m2/repository/org/apache/tomcat/tomcat-catalina/9.0.37/tomcat-catalina-9.0.37-sources.jar!/org/apache/catalina/session/ManagerBase.java:677*

    public void add(Session session) {
        sessions.put(session.getIdInternal(), session);

The first time it's executed, the session with the Spring context is added.
The second time it's executed, a second session with the same ID, but
without the Spring context, or any other session attribute I add for that
matter, overwrites the existing session, and login fails. If I debug and
prevent this by renaming the second session ID, login works because the
original session is preserved.

The stack-trace for the first call is shown below:

add:678, ManagerBase (org.apache.catalina.session)
setId:358, StandardSession (org.apache.catalina.session)
setId:327, DeltaSession (org.apache.catalina.ha.session)
setId:345, DeltaSession (org.apache.catalina.ha.session)
createSession:719, ManagerBase (org.apache.catalina.session)
createSession:422, DeltaManager (org.apache.catalina.ha.session)
createSession:410, DeltaManager (org.apache.catalina.ha.session)
doGetSession:3043, Request (org.apache.catalina.connector)
getSession:2441, Request (org.apache.catalina.connector)
getSession:908, RequestFacade (org.apache.catalina.connector)
getSession:920, RequestFacade (org.apache.catalina.connector)
getSession:253, HttpServletRequestWrapper (javax.servlet.http)
getSession:253, HttpServletRequestWrapper (javax.servlet.http)
getSession:253, HttpServletRequestWrapper (javax.servlet.http)
onAuthentication:66, RegisterSessionAuthenticationStrategy
(org.springframework.security.web.authentication.session)
doFilter:218, AbstractAuthenticationProcessingFilter
(org.springframework.security.web.authentication)
doFilter:334, FilterChainProxy$VirtualFilterChain
(org.springframework.security.web)
doFilter:200, AbstractAuthenticationProcessingFilter
(org.springframework.security.web.authentication)
doFilter:334, FilterChainProxy$VirtualFilterChain
(org.springframework.security.web)
doFilter:116, LogoutFilter
(org.springframework.security.web.authentication.logout)
doFilter:334, FilterChainProxy$VirtualFilterChain
(org.springframework.security.web)
doFilterInternal:74, HeaderWriterFilter
(org.springframework.security.web.header)
doFilter:119, OncePerRequestFilter (org.springframework.web.filter)
doFilter:334, FilterChainProxy$VirtualFilterChain
(org.springframework.security.web)
doFilter:74, CSRFSameOriginHeaderCheckFilter (ourcompany.common.web)
doFilter:334, FilterChainProxy$VirtualFilterChain
(org.springframework.security.web)
doFilter:36, SessionTrackingFilter (ourcompany.common.web)
doFilter:334, FilterChainProxy$VirtualFilterChain
(org.springframework.security.web)
doFilter:105, SecurityContextPersistenceFilter
(org.springframework.security.web.context)
doFilter:334, FilterChainProxy$VirtualFilterChain
(org.springframework.security.web)
doFilterInternal:56, WebAsyncManagerIntegrationFilter
(org.springframework.security.web.context.request.async)
doFilter:119, OncePerRequestFilter (org.springframework.web.filter)
doFilter:334, FilterChainProxy$VirtualFilterChain
(org.springframework.security.web)
doFilter:157, ChannelProcessingFilter
(org.springframework.security.web.access.channel)
doFilter:334, FilterChainProxy$VirtualFilterChain
(org.springframework.security.web)
doFilter:87, MetadataGeneratorFilter
(org.springframework.security.saml.metadata)
doFilter:334, FilterChainProxy$VirtualFilterChain
(org.springframework.security.web)
doFilterInternal:215, FilterChainProxy (org.springframework.security.web)
doFilter:178, FilterChainProxy (org.springframework.security.web)
invokeDelegate:358, DelegatingFilterProxy (org.springframework.web.filter)
doFilter:271, DelegatingFilterProxy (org.springframework.web.filter)
internalDoFilter:193, ApplicationFilterChain (org.apache.catalina.core)
doFilter:166, ApplicationFilterChain (org.apache.catalina.core)
invoke:202, StandardWrapperValve (org.apache.catalina.core)
__invoke:96, StandardContextValve (org.apache.catalina.core)
invoke:41002, StandardContextValve (org.apache.catalina.core)
invoke:541, AuthenticatorBase (org.apache.catalina.authenticator)
invoke:139, StandardHostValve (org.apache.catalina.core)
invoke:182, JvmRouteBinderValve (org.apache.catalina.ha.session)
invoke:330, ReplicationValve (org.apache.catalina.ha.tcp)
invoke:92, ErrorReportValve (org.apache.catalina.valves)
invoke:74, StandardEngineValve (org.apache.catalina.core)
invoke:747, RemoteIpValve (org.apache.catalina.valves)
service:343, CoyoteAdapter (org.apache.catalina.connector)
service:373, Http11Processor (org.apache.coyote.http11)
process:65, AbstractProcessorLight (org.apache.coyote)
process:868, AbstractProtocol$ConnectionHandler (org.apache.coyote)
doRun:1589, NioEndpoint$SocketProcessor (org.apache.tomcat.util.net)
run:49, SocketProcessorBase (org.apache.tomcat.util.net)
runWorker:1149, ThreadPoolExecutor (java.util.concurrent)
run:624, ThreadPoolExecutor$Worker (java.util.concurrent)
run:61, TaskThread$WrappingRunnable (org.apache.tomcat.util.threads)
run:748, Thread (java.lang)


The stack-trace for the second call is shown below:

add:678, ManagerBase (org.apache.catalina.session)
setId:358, StandardSession (org.apache.catalina.session)
setId:327, DeltaSession (org.apache.catalina.ha.session)
handleSESSION_CREATED:1322, DeltaManager (org.apache.catalina.ha.session)
messageReceived:1192, DeltaManager (org.apache.catalina.ha.session)
messageDataReceived:949, DeltaManager (org.apache.catalina.ha.session)
messageReceived:77, ClusterSessionListener (org.apache.catalina.ha.session)
messageReceived:788, SimpleTcpCluster (org.apache.catalina.ha.tcp)
messageReceived:771, SimpleTcpCluster (org.apache.catalina.ha.tcp)
messageReceived:335, GroupChannel (org.apache.catalina.tribes.group)
messageReceived:91, ChannelInterceptorBase (org.apache.catalina.tribes.group)
messageReceived:97, StaticMembershipInterceptor
(org.apache.catalina.tribes.group.interceptors)
messageReceived:91, ChannelInterceptorBase (org.apache.catalina.tribes.group)
messageReceived:175, TcpPingInterceptor
(org.apache.catalina.tribes.group.interceptors)
messageReceived:91, ChannelInterceptorBase (org.apache.catalina.tribes.group)
messageReceived:117, TcpFailureDetector
(org.apache.catalina.tribes.group.interceptors)
messageReceived:91, ChannelInterceptorBase (org.apache.catalina.tribes.group)
messageReceived:91, ChannelInterceptorBase (org.apache.catalina.tribes.group)
messageReceived:274, ChannelCoordinator (org.apache.catalina.tribes.group)
messageDataReceived:261, ReceiverBase (org.apache.catalina.tribes.transport)
drainChannel:216, NioReplicationTask (org.apache.catalina.tribes.transport.nio)
run:101, NioReplicationTask (org.apache.catalina.tribes.transport.nio)
runWorker:1149, ThreadPoolExecutor (java.util.concurrent)
run:624, ThreadPoolExecutor$Worker (java.util.concurrent)
run:748, Thread (java.lang)


Any help would be appreciated. I can replicate this every time and spend
some time investigating this.

Cheers,
Tim

Reply via email to