ulrich
2017-01-31 ecd3bb45d9ca0ae9290a35ef3f542ade0618762c
commit | author | age
ecccfc 1 # Nutzerverwaltung
U 2
3 Eine Webanwendung zur Verwaltung von Benutzern eines Tomcat Web- und Applikationsservers in einer Derby-Datenbank.
4
ecd3bb 5 ## Funktionen
U 6
7 Die Nutzerverwaltung stellt die folgenden Funktionen bereit
8
9 - Anlegen neuer Benutzer
10 - Löschen von Benutzern
11 - Anlegen neuer Rollen
12 - Löschen von Rollen
13 - Rollen erteilen
14 - Rollen entziehen
15
16 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.
17
18 Weitere Informationen zur Nutzerverwaltung finden sich auf der [Produktseite] (http://uhilger.de/dev/Software/Nutzerverwaltung/Nutzerverwaltung) 
19 ...dort noch nicht auf dem neuesten Stand...
20
667ccf 21 ## Webanwendung herstellen
U 22
23 Zum Herstellen der Webanwendung wird ein Java Development Kit (JDK) benötigt, wie es z.B. von [Azul](http://azul.com) oder dem [OpenJDK-Projekt](http://openjdk.java.net/) 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
24
25 ```
26 Bibliothek            Datei(en)                       Ablageort lokal
27 ----------            ---------                       ---------------
28 Tomcat .............. lib/servlet-api.jar ........... $CATALINA_HOME
29 XStream ............. xstream-1.4.7.jar ............. $JLIB
30 Jettison ............ jettison-1.3.3.jar ............ $JLIB
31 BaseLink ............ BaseLink.jar .................. $JLIB
32 Transit ............. Transit.jar ................... $JLIB
33 ```
34 Diese sind an folgenden Orten frei erhältlich:
35
36 - [Apache Tomcat](http://tomcat.apache.org)
37 - [XStream](https://github.com/codehaus/xstream)
38 - [Jettison](https://github.com/codehaus/jettison)
39 - [BaseLink](https://uhilger.de/gitblit/summary/BaseLink.git)
40 - [Transit](https://uhilger.de/gitblit/summary/Transit.git)
41
42 Nach Beschaffung des JDK und der oben angegebenen Klassenbibliotheken wird der Quellcode aus diesem Git-Repository an einen frei wählbaren lokalen Ablageort [heruntergeladen](http://uhilger.de/gitblit/zip/?r=um.git&h=master&format=zip) und entpackt. In der hier folgenden weiteren Beschreibung wird das so entstandene Verzeichnis `um` 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.
43
44 Zur Herstellung der Nutzerverwaltung werden die folgenden Kommandos ausgeführt (Beispiel für Linux):
45
46 ```
47 cd $UM
48 mkdir dist build
49 cp -r web/* build
50 cd build/WEB-INF
51 mkdir classes lib
52 cd ../..
53 cp $JLIB/* build/WEB-INF/lib
54
55 $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
56
57 $JDK/bin/jar -cf dist/um.war -C build .
58 rm -r build
59 ```
60
61 Das Webarchiv der Nutzerverwaltung liegt anschließend als `$UM/dist/um.war` fertig zum Deployment bereit.
62
63 ### Distributionsalternative
64
65 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.
66
67 ## Abhängigkeiten
68
69 Die Nutzerverwaltung erfordert die folgenden Bestandteile auf der Instanz von Tomcat, auf der sie ausgeführt werden soll:
70
71 ```
72 $CATALINA_BASE/webapps/jslib/bootstrap ............ mindestens in Version 4.0 alpha 6
73 $CATALINA_BASE/webapps/jslib/jquery ............... mindestens in Version 1.11.1
74 $CATALINA_BASE/webapps/jslib/mustache ............. mindestens in Version 2.3.0
75 ```
76
77 `$CATALINA_BASE` meint das in der der Datei [RUNNING.txt](http://tomcat.apache.org/tomcat-8.5-doc/RUNNING.txt) der Tomcat-Dokumentation so bezeichnete Verzeichnis. Nachfolgend die Quellen, von denen die obigen Abhängigkeiten bezogen werden können:
78
79 - [Bootstrap](http://getbootstrap.com)
80 - [jQuery](http://jquery.com)
81 - [Mustache](https://github.com/janl/mustache.js)
82
a3d357 83 ### Datenbank
U 84
54bbae 85 Zur Verwaltung von Benutzern in einer Datenbank muss ein [Derby-Datenbankserver](http://db.apache.org/derby) 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.
a3d357 86
U 87 Für den Zugriff auf den Datenbankserver muss sich der Datenbanktreiber `derbyclient.jar` aus der Distribution von Derby im Verzeichnis `$CATALINA_BASE/lib` befinden.
eda15d 88
U 89 ## Nutzerverwaltung auf Tomcat einschalten
90
91 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.
92
93
94 vorher
95
96 ```
97     <Engine name="Catalina" defaultHost="localhost">
98
99       <Realm className="org.apache.catalina.realm.LockOutRealm">
100         <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
101                resourceName="UserDatabase"/>
102       </Realm>
103
104       <!-- weitere Einträge ... -->
105 ```
106
107
108 nachher
109
110 ```
111     <Engine name="Catalina" defaultHost="localhost">
112
113       <Realm className="org.apache.catalina.realm.LockOutRealm">
114         <Realm className="org.apache.catalina.realm.JDBCRealm"
115           driverName="org.apache.derby.jdbc.ClientDriver"
116           connectionURL="jdbc:derby://localhost:1528/udb;user=dbadmin;password=changeit"
117           userTable="app.users" userNameCol="user_name" userCredCol="user_pass"
118           userRoleTable="app.user_roles" roleNameCol="role_name" >
119             <CredentialHandler className="org.apache.catalina.realm.MessageDigestCredentialHandler" algorithm="sha-256" />
120         </Realm>
121       </Realm>
122
123       <!-- weitere Einträge ... -->
124 ``` 
125
126 **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.
127
128 ## Verschlüsselung von Kennworten
129
130 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.  
131
132 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.