FileDocCategorySizeDatePackage
ClusterSingleSignOnListener.javaAPI DocApache Tomcat 6.0.145534Fri Jul 20 04:20:36 BST 2007org.apache.catalina.ha.authenticator

ClusterSingleSignOnListener

public class ClusterSingleSignOnListener extends org.apache.catalina.ha.ClusterListener
Receive replicated SingleSignOnMessage form other cluster node.
author
Fabien Carrion

Fields Summary
protected static final String
info
The descriptive information about this implementation.
private ClusterSingleSignOn
clusterSSO
Constructors Summary
public ClusterSingleSignOnListener()



    //--Constructor---------------------------------------------

      
    
Methods Summary
public booleanaccept(org.apache.catalina.ha.ClusterMessage msg)
Accept only SingleSignOnMessage

param
msg ClusterMessage
return
boolean - returns true to indicate that messageReceived should be invoked. If false is returned, the messageReceived method will not be invoked.

        return (msg instanceof SingleSignOnMessage);
    
public ClusterSingleSignOngetClusterSSO()


        return clusterSSO;

    
public java.lang.StringgetInfo()
Return descriptive information about this implementation.


        return (info);

    
private org.apache.catalina.SessiongetSession(java.lang.String sessionId, java.lang.String ctxname)

	
	Map managers = clusterSSO.getCluster().getManagers() ;
	Session session = null;

	if (ctxname == null) {
	    java.util.Iterator i = managers.keySet().iterator();
	    while (i.hasNext()) {
		String key = (String) i.next();
		ClusterManager mgr = (ClusterManager) managers.get(key);
		if (mgr != null) {
		    try {
			session = mgr.findSession(sessionId);
		    } catch (IOException io) {
			log.error("Session doesn't exist:" + io);
		    }
		    return session;
		} else {
		    //this happens a lot before the system has started
		    // up
		    if (log.isDebugEnabled())
			log.debug("Context manager doesn't exist:"
				  + key);
		}
	    }
	} else {
	    ClusterManager mgr = (ClusterManager) managers.get(ctxname);
	    if (mgr != null) {
		try {
		    session = mgr.findSession(sessionId);
		} catch (IOException io) {
		    log.error("Session doesn't exist:" + io);
		}
		return session;
	    } else if (log.isErrorEnabled())
		log.error("Context manager doesn't exist:" + ctxname);
	}

	return null;
    
public voidmessageReceived(org.apache.catalina.ha.ClusterMessage myobj)
Callback from the cluster, when a message is received, The cluster will broadcast it invoking the messageReceived on the receiver.

param
myobj ClusterMessage - the message received from the cluster

        if (myobj != null && myobj instanceof SingleSignOnMessage) {
            SingleSignOnMessage msg = (SingleSignOnMessage) myobj;
            int action = msg.getAction();
	    Session session = null;

	    if (log.isDebugEnabled())
		log.debug("SingleSignOnMessage Received with action "
			  + msg.getAction());

	    switch(action) {
	    case SingleSignOnMessage.ADD_SESSION:
		session = getSession(msg.getSessionId(),
				     msg.getContextName());
		if (session != null)
		    clusterSSO.associateLocal(msg.getSsoId(), session);
		break;
	    case SingleSignOnMessage.DEREGISTER_SESSION:
		session = getSession(msg.getSessionId(),
				     msg.getContextName());
		if (session != null)
		    clusterSSO.deregisterLocal(msg.getSsoId(), session);
		break;
	    case SingleSignOnMessage.LOGOUT_SESSION:
		clusterSSO.deregisterLocal(msg.getSsoId());
		break;
	    case SingleSignOnMessage.REGISTER_SESSION:
		clusterSSO.registerLocal(msg.getSsoId(), null, msg.getAuthType(),
					 msg.getUsername(), msg.getPassword());
		break;
	    case SingleSignOnMessage.UPDATE_SESSION:
		clusterSSO.updateLocal(msg.getSsoId(), null, msg.getAuthType(),
				       msg.getUsername(), msg.getPassword());
		break;
	    case SingleSignOnMessage.REMOVE_SESSION:
		session = getSession(msg.getSessionId(),
				     msg.getContextName());
		if (session != null)
		    clusterSSO.removeSessionLocal(msg.getSsoId(), session);
		break;
	    }
	}
    
public voidsetClusterSSO(ClusterSingleSignOn clusterSSO)


        this.clusterSSO = clusterSSO;