O'Reilly logo

Die OSGi Service Platform: Eine Einführung mit Eclipse Equinox by Matthias Lübken, Bernd Kolb, Nils Hartmann, Gerd Wütherich

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

17 Der User Admin Service298
public void _login(CommandInterpreter commandInterpreter) {
currentUser = null;
String userName = commandInterpreter.nextArgument();
String password = commandInterpreter.nextArgument();
if (userName == null || password == null) {
commandInterpreter.println(getHelp());
return;
}
User user = userAdmin.getUser("login.name", userName);
if (user == null) {
commandInterpreter.println(
"User '" + userName + "' unbekannt!");
return;
}
if (!user.hasCredential("login.password", password)) {
commandInterpreter.println("Falsches Passwort!");
return;
}
currentUser = user;
commandInterpreter.println(
"User " + userName + " eingeloggt");
}
[...]
}
Schritt 5: Implementierung des listroles-Kommandos
Das listroles-Kommando erwartet einen eingeloggten Benutzer, der
über die »Administrator«-Rolle verfügt. Dazu ermittelt er zunächst
das
Authorization-Objekt des Benutzers, mit dem die Rollen des
Anwenders überprüft werden können. Nur wenn ein Authorization-
Objekt ermittelt werden konnte und der Benutzer über die »Administ-
rator«-Rolle verfügt, werden die Rollen, die in der Datenbank des User
Admin Service vorhanden sind, ausgegeben. Ansonsten wird der
Befehl verweigert und eine entsprechende Fehlermeldung ausgegeben.
Implementieren Sie also abschließend folgende
_listroles()-
Methode in der Komponentenklasse:
package org.osgibook.console.user;
[...]
public class UserComponent implements CommandProvider {
[...]
Listing 17–5
Implementierung des
Kommandos listroles
29917.1 Tutorial: Ein Login-Kommando
public void _listroles(CommandInterpreter commandInterpreter) {
if (!isAuthorized("Administrators")) {
commandInterpreter
.println("Fehlende Autorisierung.");
return;
}
try {
Role[] roles = userAdmin.getRoles(null);
for (int i = 0; i < roles.length; i++) {
printRole(commandInterpreter, roles[i]);
}
} catch (InvalidSyntaxException e) {
e.printStackTrace();
}
}
private boolean isAuthorized(String requiredRole) {
if (currentUser == null) {
return false;
}
Authorization authorization =
userAdmin.getAuthorization(currentUser);
return authorization.hasRole(requiredRole);
}
private void printRole(CommandInterpreter commandInterpreter,
Role role) {
StringBuilder buffer = new StringBuilder();
switch (role.getType()) {
case Group.USER: {
buffer.append("User :");
buffer.append(role.getName());
buffer.append("\n Properties: ");
buffer.append(role.getProperties());
break;
}
case Group.GROUP: {
buffer.append("Group:");
buffer.append(role.getName());
buffer.append("\n Properties: ");
buffer.append(role.getProperties());
buffer.append("\n Members: [");
Role members[] = ((Group) role).getMembers();
for (Role member : members) {
buffer.append(member.getName());
}
buffer.append("]");
break;
}
17 Der User Admin Service300
}
commandInterpreter.println(buffer.toString());
}
}
Schritt 6: Ausführen der Anwendung
Starten Sie nun die Anwendung, indem Sie eine neue Launch-Konfigu-
ration anlegen, die neben dem Bundle aus dem Workspace auch die
folgenden Bundles enthält:
org.eclipse.equinox.common,
org.eclipse.eclipse.ds,
org.eclipse.equinox.preferences,
org.eclipse.equinox.useradmin,
org.eclipse.osgi,
org.eclipse.osgi.services
Nach dem Starten der Anwendung können Sie sich über das Kom-
mando
login andi secrect einloggen. Wenn Sie mit diesem User versu-
chen, das Kommando
listroles auszuführen, bekommen Sie eine Feh-
lermeldung, dass der Benutzer nicht über eine entsprechende
Autorisierung verfügt:
osgi> login andi secret
User andi eingeloggt
osgi> listroles
Fehlende Autorisierung.
Wechseln Sie nun den Benutzer, indem Sie sich als »admin« mit dem
Passwort »osgi« anmelden. Rufen Sie anschließend das
listroles-
Kommando erneut auf. Da der »admin«-Benutzer über die erforder-
liche Rolle verfügt, kann das Kommando ausgeführt und die im User
Repository gespeicherten Rollen und Gruppen angezeigt werden:
osgi> login admin osgi
User admin eingeloggt
osgi> listroles
Group: Administrators
Properties: {}
Members: [admin]
User: admin
Properties: {login.name=admin}
User: andi
Properties: {login.name=andi}
Group: Users
Properties: {}
Members: [andi]
30117.2 Der User Admin Service im Überblick
Damit haben Sie eine einfache Anwendung unter Verwendung des
User Admin Service gebaut. In den folgenden Unterkapiteln werden
wir Ihnen die Konzepte des User Admin Service näher vorstellen.
17.2 Der User Admin Service im Überblick
Der User Admin Service implementiert eine einfache Benutzerverwal-
tung, mit der Benutzer und Gruppen angelegt, verwaltet und entfernt
werden nnen (vgl. Abb. 17–3). Da der User Admin Service die Daten
in einem User Repository ablegt und persistiert, bleiben diese auch
über einen System-Neustart hinaus erhalten.
Authentifizierung
und Autorisierung
Mittels des User Admin Service können innerhalb der OSGi Ser-
vice Platform die folgenden zwei Aufgaben realisiert werden:
Authentifizierung: Innerhalb der Authentifizierung wird festge-
stellt, ob ein Benutzer tatsächlich der ist, für den er sich ausgibt.
Dazu muss der Benutzer eine dezidierte Information (bspw. ein
Passwort) angeben, über die eine Identität verifiziert werden kann.
Autorisierung: Die Autorisierung gibt an, ob ein authentifizierter
Benutzer eine bestimmte Aktion ausführen darf oder nicht.
Rollen
Dazu implementiert der User Admin Service ein rollenbasiertes Benut-
zermodel. Eine Rolle repräsentiert entweder einen Benutzer oder eine
Gruppe, die Benutzer und weitere Gruppen enthalten kann. Ein Benut-
zer muss dabei nicht zwingend eine natürliche Person sein. Jeder
Akteur, der Aktionen in einer Anwendung ausführen möchte, kann als
Benutzer repräsentiert werden, bspw. auch ein automatischer Dienst.
Abb. 17–3
Der User Admin Service
OSGi Framework
Management
Bundle
M
ana
g
emen
t
UserAdmin
Service
User
DB
Service
Management
Agent

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required