So the manager would be this, I've noticed it uses the StandardSession, which explicitly prevents serialization of the user principal and auth type: org.redisson.tomcat.RedissonSessionManager
Two questions, on org.apache.catalina.Session, do the values getNote and setNote replicate across the cluster by default? I'm curious if we could solve this whole thing with a valve that copies the principal into the org.apache.catalina.Session or the HttpSession. Next, Chris are you saying RedissonSessionManager should use their own implementation of StandardSession that preserves the principal? I guess I never got the questions answered, why isn't this the default behavior? It seems tomcat goes well out of its way to *not serialize *the principal. I was wondering if there was a reason for that. Thanks! On Wed, Feb 12, 2020 at 10:07 AM Christopher Schultz < ch...@christopherschultz.net> wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA256 > > Carsten, > > On 2/12/20 10:54 AM, Klein, Carsten wrote: > > actually, Tomcat just does not serialize authentication > > information, that is AuthType (BASIC, DIGEST etc.) and the > > Principal, during session serialization. That affects session > > persistence across restarts (no> matter what manager is used) as > > well as session transfer between cluster nodes. > The DeltaManager does indeed handle this information. Both the > AuthType and the Principal. > > > As a result, persisted and reloaded sessions as well as sessions > > transferred between cluster nodes are no longer authenticated. > > I have to admit, I've never actually set up a Tomcat cluster (because > I think it's overkill for my purposes), but the code /is/ there. > > > I was pointing that out in this mailing list in late 2019 (Topic > > "Tomcat 7.x.x, 8.x.x, 8.5.x and 9.x.x: Session serialization w/o > > authentication related information"). > > > > To overcome this, I have a simple solution in mind. It's only about > > 10 new lines of code. Basically, it's a new boolean property > > 'persistAuthentication' for the manager. Mark Thomas agreed with > > optionally saving authentication information along with the > > persisted session (only, if the new option is true). He encouraged > > me to write an enhancement/patch and provide it as a Pull Request. > > > > The only problem for me is lack of time. Although the code itself > > is quite simple, the things making me holding back are the Git > > stuff, making Tomcat build in my Eclipse etc... > > Forget Eclipse. We can get you started very easily: > > $ git clone https://github.com/apache/tomcat > $ cd tomcat > $ ant deploy > > (done) > > - -chris > > > On 2/11/20 9:33 PM, Jonathan S. Fisher wrote: > >>>> Apologies, I'm not seeing how this helps, I don't see where > >>>> authentication information is transmitted > > > > No, seriously, what session manager are you using? > > > > -chris > > > >>>> On Tue, Feb 11, 2020 at 5:39 PM Christopher Schultz < > >>>> ch...@christopherschultz.net> wrote: > >>>> > >>>> Jon, > >>>> > >>>> On 2/11/20 5:36 PM, Jonathan S. Fisher wrote: > >>>>>>>> What do you mean by logged out If it's one from > >>>>>>>> Redisson, then you should look at their code and not > >>>>>>> Tomcat's code. > >>>>>>> > >>>>>>> So you have two tomcat nodes: A & B, clustered in any > >>>>>>> fashion (forget I mentioned redisson) of your choosing; > >>>>>>> let's say they're clustered using the built in tcp > >>>>>>> point-to-point replication. > >>>> The choice of session manager is ... pretty critical, here. > >>>> So which session manager are you using/ > >>>> > >>>>>>> Have 5 people logged into an application on the first > >>>>>>> server using standard JavaEE APIs > >>>>>>> (HttpServletrequest.login) Now turn off server A. Your > >>>>>>> load balancer starts sending traffic to server B. Their > >>>>>>> sessions will be there, BUT they will be logged out; > >>>>>>> one has to call HttpServletRequest.login() again. Upon > >>>>>>> login, Tomcat destroys the previous session (as it > >>>>>>> should), nullifying any benefit for clustering the > >>>>>>> application in the first place. > >>>> Tomcat does not destroy sessions when authenticating. > >>>> > >>>>>>> In the two links I provided, the StandardSession object > >>>>>>> goes to great length to ensure that the security > >>>>>>> principal is not serialized into the session > >>>> > >>>> True. > >>>> > >>>>>>> and therefore [not] replicated in the cluster. > >>>> > >>>> False. > >>>> > >>>>>>> Why is that? Why not serialize the security credential > >>>>>>> so the user can bounce between servers? > >>>> > >>>> Authentication information is transmitted in a different > >>>> way. > >>>> > >>>> I would really encourage you to look at the code for > >>>> DeltaManager, which is the session manager typically used for > >>>> clustering in Tomcat. If you are not using the DeltaManager, > >>>> then you need to look at the code being used for your actual > >>>> SessionManager. > >>>> > >>>> -chris > >>>> > >>>>>>> On Tue, Feb 11, 2020 at 4:27 PM Christopher Schultz > >>>>>>> <ch...@christopherschultz.net > >>>>>>> <mailto:ch...@christopherschultz.net>> wrote: > >>>>>>> > >>>>>>> Jon, > >>>>>>> > >>>>>>> On 2/11/20 2:35 PM, exabrial wrote: > >>>>>>>> https://stackoverflow.com/questions/59833043/tomcat-logs-user-o > ut- > > > >>>>>>>> > dur > >>>> > >>>>>>>> > > i > >>>>>>> > >>>>>>>> > >>>> ng-session-failover-event-and-restarts > >>>>>>> <https://stackoverflow.com/questions/59833043/tomcat-logs-user-o > ut- > > > >>>>>>> > dur > >>>> > >>>>>>> > > ing-session-failover-event-and-restarts > >>>> <https://stackoverflow.com/questions/59833043/tomcat-logs-user-out- > dur > > > >>>> > ing-session-failover-event-and-restarts> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>> > > We've implemented session replication using Redisson, but we > >>>>>>> noticed > >>>>>>>> that if we intentionally fail a node, the user's > >>>>>>>> sessions do get replicated, but they're logged out > >>>>>>>> when they're restored on the new server. > >>>>>>> > >>>>>>> What exactly do you mean when you say "logged-out"? > >>>>>>> > >>>>>>>> Is there a way to make this work properly so the > >>>>>>>> user doesn't get logged out during a failover event? > >>>>>>> > >>>>>>>> Most /More importantly, is there a technical or > >>>>>>>> security reason for this? > >>>>>>> > >>>>>>> FYI the servlet specification does not guarantee that > >>>>>>> <distributable> web applications also transfer > >>>>>>> authentication information. > >>>>>>> > >>>>>>>> If you look at the Tomcat code, they actively try > >>>>>>>> and avoid serialization the Security Principal: > >>>>>>> > >>>>>>>> https://github.com/apache/tomcat/blob/master/java/org/apache/ca > tal > > > >>>>>>>> > ina > >>>> > >>>>>>>> > > / > >>>>>>> > >>>>>>>> > >>>> session/StandardSession.java#L1559 > >>>>>>> <https://github.com/apache/tomcat/blob/master/java/org/apache/ca > tal > > > >>>>>>> > ina > >>>> > >>>>>>> > > /session/StandardSession.java#L1559 > >>>> <https://github.com/apache/tomcat/blob/master/java/org/apache/catal > ina > > > >>>> > /session/StandardSession.java#L1559> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>> > > https://github.com/apache/tomcat/blob/master/java/org/apache/catalina/ > >>>> > > > se > >>>>>>> > >>>>>>> > >>>> ssion/StandardSession.java#L234 > >>>>>>> <https://github.com/apache/tomcat/blob/master/java/org/apache/ca > tal > > > >>>>>>> > ina > >>>> > >>>>>>> > > /session/StandardSession.java#L234 > >>>> <https://github.com/apache/tomcat/blob/master/java/org/apache/catal > ina > > > >>>> > /session/StandardSession.java#L234> > >>>>>>> > >>>>>>> > >>>>>>> > >>>> > > That code is for serializing the whole session, not transmitting > >>>>>>> session information between cluster nodes. You need to > >>>>>>> read the code for the various ClusterManagers and > >>>>>>> (more importantly), the DeltaSession class. > >>>>>>> > >>>>>>> Which SessionManager are you using? If it's one from > >>>>>>> Redisson, then you should look at their code and not > >>>>>>> Tomcat's code. > >>>>>>> > >>>>>>> -chris > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> -- Jonathan | exabr...@gmail.com > >>>>>>> <mailto:exabr...@gmail.com> Pessimists, see a jar as > >>>>>>> half empty. Optimists, in contrast, see it as half > >>>>>>> full. Engineers, of course, understand the glass is > >>>>>>> twice as big as it needs to be. > >>>>> > >>>>> ------------------------------------------------------------------ > - --- > >>>>> > >>>>> > > > >>>>> > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > >>>>> For additional commands, e-mail: > >>>>> users-h...@tomcat.apache.org > >>>>> > >>>>> > >>>> > >> > >> --------------------------------------------------------------------- > >> > >> > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > >> For additional commands, e-mail: users-h...@tomcat.apache.org > >> > > > > --------------------------------------------------------------------- > > > > > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > > For additional commands, e-mail: users-h...@tomcat.apache.org > > > -----BEGIN PGP SIGNATURE----- > Comment: Using GnuPG with Thunderbird - https://www.enigmail.net/ > > iQIzBAEBCAAdFiEEMmKgYcQvxMe7tcJcHPApP6U8pFgFAl5EIqEACgkQHPApP6U8 > pFiEUQ//VSOyYvJeAh4aYLzq7nHwKCtBCMJBDJTdOdttCRBtztmvE1nK1BanBLz8 > CVSi0TLPkKjri/tnpnuOvPG7oUv19xG9J1Do7cWxw7mRg/lxk91Ce4oz9aENZIMn > 11DoW9TX5itWmmU4l0knGL1IXAKdFkxDPmd+hBAs934pPBeq5rPG/mZd0hQ1s4Qp > zeMnVBbX+uX6P2YW5wAGUS5Z4N6Y55BuD6olmV/dOKZ1FyKR76vPYErJ0Aj5tryl > G1/5aikwURTdLGFH2lOjaDoChueVrHckbZaaog8z0Vbnv/2eL5xml+AMVs60IYOg > da7gVF59WBAvGucpGKCsQn3BFerUgEw1pOPFa3NTT4BrgUvKQmGlGReUSvYASCgP > UAPmdtrUvudvnuxRPK8jO9uwLiniqwZ1OZttL+IREeGwKFkYJGphE1akI1XSSL7p > 9QKVfIt4wrSWwQke8CxmAjis8J9L1uJ88Uk6nV1cnzxoowdSidStKN3Jv3/prksk > cl2GqvcwGKXLt7g5q/DDhuyVpztB+1HpXO3eE7urTuX0lSEnxKuFCiNd4DDJfd5M > /EO7tFhtUkYuucGSS8dpN/uGZm61wYlpp2/he5zC7GkX/VKClJ4oNZ+OrEgtJDwU > v2ilAJS4czhUN/IrDywNh6Xk1+fdFmrCDtReTTblV19RVFo6vFY= > =qmsE > -----END PGP SIGNATURE----- > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org > > -- Jonathan | exabr...@gmail.com Pessimists, see a jar as half empty. Optimists, in contrast, see it as half full. Engineers, of course, understand the glass is twice as big as it needs to be.