edit | blame | history | raw

Nutzerverwaltung

Eine Webanwendung zur Verwaltung von Benutzern eines Tomcat Web- und Applikationsservers in einer Derby-Datenbank.

Funktionen

Die Nutzerverwaltung stellt die folgenden Funktionen bereit

  • Anlegen neuer Benutzer
  • Löschen von Benutzern
  • Anlegen neuer Rollen
  • Löschen von Rollen
  • Rollen erteilen
  • Rollen entziehen

Die Bedienoberfläche passt sich an verschiedene Geräteausstattungen an (responsiv) und fügt sich neben den o.a. Funktionen in den Rahmen für Verwaltungsfunktionen einer WebBox ein.

Weitere Informationen zur Nutzerverwaltung finden sich auf der Produktseite

Webanwendung herstellen

Zum Herstellen der Webanwendung wird ein Java Development Kit (JDK) benötigt, wie es z.B. von Azul oder dem OpenJDK-Projekt erhältlich ist. In der hier folgenden weiteren Beschreibung wird der lokale Ablageort des Java Development Kits $JDK genannt. Desweiteren werden die folgenden Klassenbibliotheken benötigt

Bibliothek            Datei(en)                       Ablageort lokal
----------            ---------                       ---------------
Tomcat .............. lib/servlet-api.jar ........... $CATALINA_HOME
XStream ............. xstream-1.4.7.jar ............. $JLIB
Jettison ............ jettison-1.3.3.jar ............ $JLIB
BaseLink ............ BaseLink.jar .................. $JLIB
Transit ............. Transit.jar ................... $JLIB

Diese sind an folgenden Orten frei erhältlich:

Nach Beschaffung des JDK und der oben angegebenen Klassenbibliotheken wird der Quellcode aus diesem Git-Repository an einen frei wählbaren lokalen Ablageort heruntergeladen und entpackt. In der hier folgenden weiteren Beschreibung wird das so entstandene Verzeichnis um-master einschließlich des absoluten Pfades dorthin $UM genannt. Ferner wird angenommen, dass die oben aufgeführten Klassenbibliotheken lokal an Orten abgelegt sind, deren Pfade mit den Platzhaltern $JLIB und $CATALINA_HOME gemeint sind. Anstelle der Platzhalter in den folgenden Kommandos muss also der absolute Pfad des lokalen Ablageortes eingesetzt werden.

Zur Herstellung der Nutzerverwaltung werden die folgenden Kommandos ausgeführt (Beispiel für Linux):

cd $UM
mkdir dist build
cp -r web/* build
cd build/WEB-INF
mkdir classes lib
cd ../..
cp $JLIB/* build/WEB-INF/lib

$JDK/bin/javac -classpath $JLIB/jettison-1.3.3.jar:$JLIB/BaseLink.jar:$JLIB/Transit.jar:$JLIB/xstream-1.4.7.jar:$CATALINA_HOME/lib/servlet-api.jar -d ./build/WEB-INF/classes  src/java/de/uhilger/um/*.java src/java/de/uhilger/um/api/*.java src/java/de/uhilger/um/web/*.java src/java/de/uhilger/um/daten/*.java

$JDK/bin/jar -cf dist/um.war -C build .
rm -r build

Das Webarchiv der Nutzerverwaltung liegt anschließend als $UM/dist/um.war fertig zum Deployment bereit.

Distributionsalternative

Das Kommando cp $JLIB/* build/WEB-INF/lib kann auch weggelassen werden, dann sind die Klassenbibliotheken nicht Teil des Webarchivs der Nutzerverwaltung. In diesem Fall muss stattdessen der Inhalt von $JLIB nach $CATALINA_BASE/lib kopiert werden.

Abhängigkeiten

Die Nutzerverwaltung erfordert die folgenden Bestandteile auf der Instanz von Tomcat, auf der sie ausgeführt werden soll:

$CATALINA_BASE/webapps/jslib/bootstrap ............ mindestens in Version 4.0 alpha 6
$CATALINA_BASE/webapps/jslib/jquery ............... mindestens in Version 1.11.1
$CATALINA_BASE/webapps/jslib/mustache ............. mindestens in Version 2.3.0

$CATALINA_BASE meint das in der der Datei RUNNING.txt der Tomcat-Dokumentation so bezeichnete Verzeichnis. Nachfolgend die Quellen, von denen die obigen Abhängigkeiten bezogen werden können:

Datenbank

Zur Verwaltung von Benutzern in einer Datenbank muss ein Derby-Datenbankserver im Zugriff der Nutzerverwaltung sein. Im Auslieferungszustand der Nutzerverwaltung ist dies in der Datei $UM/web/META-INF/context.xml als Uniform Resource Locator (URL) jdbc:derby://127.0.0.1:1528 konfiguriert. Damit wird auf einen Derby-Server auf Port 1528 der lokalen Maschine verwiesen. Dieser Eintrag muss geändert werden, wenn sich der Datenbankserver an einem anderen Ort befindet.

Für den Zugriff auf den Datenbankserver muss sich der Datenbanktreiber derbyclient.jar aus der Distribution von Derby im Verzeichnis $CATALINA_BASE/lib befinden.

Nutzerverwaltung auf Tomcat einschalten

Die Nutzerverwaltung wird per Deploy auf Tomcat installiert und kann anschließend von Benutzern mit der Rolle nutzerAdmin ausgeführt werden. Damit Tomcat die von der Nutzerverwaltung verwaltete Nutzerdatenbank verwendet, muss in der Datei $CATALINA_BASE/conf/server.xml folgende Änderung gemacht und Tomcat neu gestartet werden.

vorher

    <Engine name="Catalina" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <!-- weitere Einträge ... -->

nachher

    <Engine name="Catalina" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.JDBCRealm"
          driverName="org.apache.derby.jdbc.ClientDriver"
          connectionURL="jdbc:derby://localhost:1528/udb;user=dbadmin;password=changeit"
          userTable="app.users" userNameCol="user_name" userCredCol="user_pass"
          userRoleTable="app.user_roles" roleNameCol="role_name" >
            <CredentialHandler className="org.apache.catalina.realm.MessageDigestCredentialHandler" algorithm="sha-256" />
        </Realm>
      </Realm>

      <!-- weitere Einträge ... -->

Bitte beachten: Ab Version 8.5 von Tomcat wurde die Verschlüsselung auf SHA-256 umgestellt. Dies muss dem JDBCRealm mit dem oben aufgeführten CredentialHandler vermittelt werden.

Verschlüsselung von Kennworten

Die Nutzerverwaltung legt Kennworte verschlüsselt in der Datenbank ab. Standardmäßig wird dafür die Klasse RealmBase von Tomcat verwendet. Damit innerhalb der Nutzerverwaltung auch andere Mechanismen verwendet werden können, wird die Schnittstelle de.uhilger.um.Digester verwendet. Die Klasse de.uhilger.um.TomcatDigester implementiert diese und setzt dort die zuvor erwähnte Klasse RealmBase von Tomcat ein.

Im Deployment Descriptor $UM/web/WEB-INF/web.xml ist der Context Parameter digester hinterlegt und standardmäßig auf de.uhilger.um.TomcatDigester eingestellt. Soll eine andere Form der Verschlüsselung genutzt werden, kann dies mit einer eigenen Implementierung der Schnittstelle de.uhilger.um.Digester erreicht und entsprechend im Deployment Descriptor umkonfiguriert werden.