/**********************************************************************
* $Source: /cvsroot/jameica/jameica.webadmin/src/de/willuhn/jameica/webadmin/deploy/AbstractWebAppDeployer.java,v $
* $Revision: 1.7 $
* $Date: 2008/04/10 13:02:29 $
* $Author: willuhn $
* $Locker: $
* $State: Exp $
*
* Copyright (c) by willuhn software & services
* All rights reserved
*
**********************************************************************/
package de.willuhn.jameica.webadmin.deploy;
import org.mortbay.jetty.Handler;
import org.mortbay.jetty.security.Constraint;
import org.mortbay.jetty.security.ConstraintMapping;
import org.mortbay.jetty.security.SecurityHandler;
import org.mortbay.jetty.security.UserRealm;
import org.mortbay.jetty.webapp.WebAppContext;
import de.willuhn.logging.Logger;
/**
* Abstrakte Basis-Implementierung eines Deployers, der Web-Anwendungen deployen kann.
* Zum Etablieren einer Webanwendung muss lediglich von dieser Klasse abgeleitet werden.
*/
public abstract class AbstractWebAppDeployer implements Deployer
{
/**
* @see de.willuhn.jameica.webadmin.deploy.Deployer#deploy()
*/
public final Handler[] deploy()
{
String path = getPath();
String context = getContext();
Logger.info("deploying " + context + " (" + path + ")");
WebAppContext app = new WebAppContext(path,context);
// Classloader explizit angeben. Sonst verwendet Jetty den System-Classloader, der nichts kennt
app.setClassLoader(this.getClass().getClassLoader());
UserRealm realm = getUserRealm();
if (realm != null)
{
Logger.info(" activating authentication via " + realm.getName());
Constraint constraint = new Constraint();
constraint.setName(Constraint.__BASIC_AUTH);
constraint.setAuthenticate(true);
String[] roles = getSecurityRoles();
if (roles != null)
{
constraint.setRoles(roles);
}
ConstraintMapping cm = new ConstraintMapping();
cm.setConstraint(constraint);
cm.setPathSpec("/*");
// Wir nehmen uns den Security-Handler der Webapp und passen
// ihne fuer uns an.
// NIE WIEDER AENDERN! Sonst liefert request.getRemoteUser() null!
SecurityHandler sh = app.getSecurityHandler();
sh.setUserRealm(realm);
sh.setConstraintMappings(new ConstraintMapping[]{cm});
// app.setSecurityHandler(sh);
}
return new Handler[]{app};
}
/**
* Liefert den Pfad im Dateisystem zu der Web-Anwendung.
* Also das Verzeichnis, in dem sich die index.jsp befindet.
* @return Pfad im Dateisystem zur Webanwendung.
*/
protected abstract String getPath();
/**
* Liefert den Namen des Contextes.
* Soll die Webanwendung also unter "http://server/test" erreichbar
* sein, muss die Funktion "/test" zurueckliefern.
* @return der Name des Context.
*/
protected abstract String getContext();
/**
* Liefert die Benutzer-Rollen, die in der Web-Applikation zur Verfuegung stehen.
* Dummy-Implementierung, die keine Rollen zurueckliefert.
* Kann jedoch ueberschrieben werden.
* @return Liste der Rollen der Webanwendung.
*/
protected String[] getSecurityRoles()
{
return null;
}
/**
* Liefert das Login-Handle, welches fuer die Web-Applikation verwendet werden soll.
* Dummy-Implementierung, die kein Login-Handle zurueckliefert.
* Kann jedoch ueberschrieben werden.
* @return das Login-Handle.
*/
protected UserRealm getUserRealm()
{
return null;
}
}
/*********************************************************************
* $Log: AbstractWebAppDeployer.java,v $
* Revision 1.7 2008/04/10 13:02:29 willuhn
* @N Zweischritt-Deployment. Der Server wird zwar sofort initialisiert, wenn der Jameica-Service startet, gestartet wird er aber erst, wenn die ersten Handler resgistriert werden
* @N damit koennen auch nachtraeglich zur Laufzeit weitere Handler hinzu registriert werden
* @R separater Worker in HttpServiceImpl entfernt. Der Classloader wird nun direkt von den Deployern gesetzt. Das ist wichtig, da Jetty fuer die Webanwendungen sonst den System-Classloader nutzt, welcher die Plugins nicht kennt
*
* Revision 1.6 2007/12/04 19:09:13 willuhn
* *** empty log message ***
*
* Revision 1.5 2007/12/04 18:43:27 willuhn
* @N Update auf Jetty 6.1.6
* @N request.getRemoteUser() geht!!
*
* Revision 1.4 2007/12/04 12:13:48 willuhn
* @N Login pro Webanwendung konfigurierbar
*
* Revision 1.3 2007/12/03 23:43:49 willuhn
* *** empty log message ***
*
* Revision 1.2 2007/12/03 19:00:19 willuhn
* *** empty log message ***
*
* Revision 1.1 2007/05/15 13:42:36 willuhn
* @N Deployment von Webapps, WARs fertig und konfigurierbar
*
**********************************************************************/