Hey Dirk,

I thing you have found a strange missing feature inside the cluster implementation. Currently all other realm MemoryRealm, DataSourceRealm,JNDIRealm, JAASRealm and JDBCRealm create a GenericPrincipal that used inside the DeltaRequest.setPrincipal method. The UserDatabaseRealm create a o.a.c.users.MemoryUser principal. Very bad thing!! Integrate a spezial handling for this is easy, but.... :-(

I have tested with MemoryRealm successfull with basic auth. Sorry, but this means that at every request a message is replicated. The session principal is set at every request. I don't like this behaviour. Any ideas to change it are very welcomed!

Please open a bug report that we can work together at this auth topic and documened it well at changelog.

Thanks for reporting this.
Peter




Peter Rossbach schrieb:

Hmm,
I have look inside source of DeltaRequest

public void setPrincipal(Principal p) {
       int action = (p==null)?ACTION_REMOVE:ACTION_SET;
       SerializablePrincipal sp = null;
       if ( p != null ) {
sp = SerializablePrincipal.createPrincipal((GenericPrincipal)p);
       }
       addAction(TYPE_PRINCIPAL,action,NAME_PRINCIPAL,sp);
   }
....
public synchronized void execute(DeltaSession session, boolean notifyListeners) {
...
                   Principal p = null;
                   if ( info.getAction() == ACTION_SET ) {
SerializablePrincipal sp = (SerializablePrincipal)info.getValue(); p = (Principal)sp.getPrincipal(session.getManager().getContainer().getRealm());
                   }
                   session.setPrincipal(p,false);
                   break;
               }//case
....
....

and this look like that we explizit replicated the principal.

I will test you use case with the newest 5.5.x code base again and describe
the results later.
peter

PS: SingleSignOn is currently not supported at the cluster implementation :-(



Dirk de Kok schrieb:

hi all,

we are having a problem with our Tomcat 5.5.9 cluster. We run 2 Tomcat
instances on physically different machines. For security we use normal
container managed security, configured in the web.xml. Session replication works fine, and session id's are same across the two instances. We only have
trouble with the authentication.
For instance, if you are logged in on instance1, if in case of error the
load balancer redirects subsequent request to instance2, you have to login
again. Turning on Single Signon did not help.
Browsing through the Tomcat source code I noticed that very explicit the
security Principal is not saved in a serialized session. Has anybody an idea
why this is not done? What way would we be able to let the security
information propagate throughout the cluster?

Configuration:
- OS: RH 4
- App server: Tomcat 5.5.9
- Session replication: in-memory, pooled
- Load balancing via hardware load balancer (Cisco) with sticky sessions

tia,

Dirk

- Lost Boys creates and delivers internet & mobile solutions -
Dirk de Kok | Java Specialist
Lost Boys B.V. | Joop Geesinkweg 209 | 1096 AV Amsterdam The Netherlands |
Tel: +31 20 4604500 | Fax: +31 20 4604501 | [EMAIL PROTECTED] |
www.lostboys.nl
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]







---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]









---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to