Java Enterprise-Anwendungen mit JBoss bereitstellen...

Preview:

Citation preview

www.it-administrator.de Juli 2011 49

P R A X I S I W o r k s h o p

ava EE ist eine Ansammlung diver-ser Softwarekomponeten und

Diensten, die quasi einen De-facto-Stan-dard bei der Entwicklung von Enterpri-se-Anwendungen darstellen. Durch klardefinierte APIs können dabei Komponen-ten unterschiedlichster Hersteller problem-los miteinander agieren. Jede Java EE ba-sierte Anwendung benötigt natürlich eineentsprechende Umgebung, in der dieseablaufen kann und die die notwendigenKomponenten und Services zur Verfügungstellt, beispielsweise Transaktionsmanage-ment, Namens- und Verzeichnisdienste,Persistenz- und Deployment-Dienste so-wie ein Sicherheits-Framework (siehe Bild1). Eine vollständige Liste findet sich inder Java EE-Spezifikation [1].

Im kommerziellen Umfeld existieren mitIBM Websphere und BEA WebLogic zweiweitverbreitete Schwergewichte entspre-chender Server-Implementierung. MitJBoss steht solch ein Server als Open Sour-ce-Produkt unter der GNU Lesser GeneralPublic License (LGPL) zur Verfügung. Die-ser stellt alle notwendigen Softwarekom-poneten, Dienste und Container der Spe-zifikation zur Verfügung und erweitert dieseum eigene, Server-spezifische, Konfigura-tionsmöglichkeiten. Beispielsweise enthält

JBoss einen EJB-Container für EnterpriseJava Beans (EJB) [2] oder einen Webserverauf Basis von Tomcat zum Bereistellen vonServlets und JavaServer Pages (JSP). EineCommunity-Edition von JBoss, das inzwi-schen zu Red Hat gehört, steht unter [3]zum Download zur Verfügung.

JBoss installierenDer JBoss Applikationsserver (AS) stehtebenfalls unter [3] als ZIP-Datei zumDownload bereit. Bevor es jedoch an des-sen Installation geht, müssen Sie sicher-stellen, dass das System entweder über einaktuelles Java Development Kit (JDK)oder ein Java Runtime Environment(JRE) verfügt. Frühere Versionen von

JBoss AS benötigten zwingend ein JDK,da dieses über einen entsprechendenCompiler für Java-Code verfügt. Dieserist zum Übersetzen von JSP-Dateien not-wendig. Aktuellen Versionen, also AS5oder AS6, genügt jedoch auch ein JRE,da JBoss eine Eclipse-JDT Bibliothek mitausgeliefert, die ebenfalls Java-Code über-setzen kann. Handelt es sich bei dem Sys-tem, auf dem Sie JBoss installieren wollen,jedoch um einen Entwicklungsrechner,so bevorzugen Sie wahrscheinlich den-

J

Java Enterprise-Anwendungen mit JBoss bereitstellen

Webanwendungen auf dem Silber-tablettvon Thorsten Scherf

Das Entwickeln von Unternehmensanwendungen wirdheutzutage immer umfangreicher und komplexer. Stehtein Entwickler vor der Aufgabe eine Unternehmensan-wendung zu programmieren, so stehen ihm hierfür imWesentlichen zwei Software-Architekturen zur Verfü-gung. Auf der einen Seite existiert die von Microsoft entwickelte .NET-Plattform, auf der anderen Seite die herstellerunabhängige Java Platt-form, Enterprise Edition – aktuell auch als Java EE bekannt. DieserWorkshop gibt einen Einstieg in Java EE auf Basis des JBoss Applikationsservers.

Bild 1: Ein Applikationsserver besteht aus verschiedenen Komponenten, die auf ein Enterprise-Informatiom-System (EIS) zurückgreifen können

Quell

e: 12

3RF

50 Juli 2011 www.it-administrator.de

P R A X I S I W o r k s h o p

noch das JDK. Nach der Installation derJava-Umgebung ist darauf zu achten, dassdie JAVA_HOME-Variable auf das JavaRoot-Verzeichnis zeigt:

# export JAVA_HOME=/usr/lib/jvm/

jre-1.6.0-openjdk

# echo $JAVA_HOME

/usr/lib/jvm/jre-1.6.0-openjdk

# java -version

java version “1.6.0_18”

OpenJDK Runtime Environment

(IcedTea6 1.8.3)

(fedora-46.1.8.3.fc13-i386)

OpenJDK Server VM

(build 14.0-b16, mixed mode)

Nach diesen Vorarbeiten entpacken Siedas ZIP-Archiv des JBoss AS in ein be-liebiges Verzeichnis, beispielsweise nach/opt und passen die JBOSS_HOME-Va-riable entsprechend an, so dass diese aufdas Installationsverzeichnis zeigt. Zur Ad-ministration ist ein grundlegendes Ver-ständnis der Verzeichnisstruktur des Ser-vers wichtig. Nach dem Auspacken desArchivs befinden sich im Root-Verzeich-nis diverse Ordner:- * bin-Verzeichnis: Enthält alle Skripte

die zum Starten und Stoppen des Ser-vers notwendig sind. Außerdem ist hierauch das JMX-Kommandozeilentooltwiddle abgelegt, mit dem Sie den Ser-ver administrieren können.

- * client-Verzeichnis: Enthält Bibliothe-ken die eventuell beim Zugriff vonStandalone-Clients benötigt werden.Bei Standalone-Clients handelts es sichbeispielsweise um GUI-Clients auf Basis

von Swing oder AWT, Webservice-Clients oder JMS-Clients.

- * doc-Verzeichnis: Enthält hauptsächlichDTD-Dateien und XML-Schemada-teien für die JBoss Konfigurationsda-teien, da diese auf XML basieren. Kon-figurationsbeispiele finden sich unterhalbvon docs/examples/.

- * lib-Verzeichnis: Enthält Bibliotheken,die zum Starten des JBoss AS notwen-dig sind.

- * server-Verzeichnis: JBoss kommt vonHaus aus mit verschiedenen Konfigu-rationen daher. Dieses Verzeichnis ent-hält diverse Unterverzeichnisse, die je-weils einer bestimmten Konfigurationentsprechen. Beim Starten des Serverskönnen Sie dann bestimmen, welcheKonfiguration zum Einsatz kommensoll. Natürlich lassen sich die einzelnenKonfigurationen ändern oder neue hin-zufügen. Bild 2 zeigt das Konfigurati-onsverzeichniss “all”. Im Vergleich zurDefault-Konfiguration sind hier bei-spielsweise auch die JBoss-Clusterser-vices aktiviert.

Durch das Auswählen einer bestimmtenServer-Konfiguration können Sie nunalso bestimmen, welche JEE-Services undKomponenten der JBoss AS starten soll.Passt keine der vorhandenen Konfigura-tionen, kopieren Sie einfach einen vor-handenen Ordner, benennen diesen umund passen die Kopie entsprechend an.

Wie das genau geht, erfahren Sie späterin diesem Workshop. Möchten Sie denJBoss-Server mit sämtlichen Services star-ten, so ist hierfür der folgende Aufrufnotwendig:

# /opt/jboss-5.1.0.GA/bin/run.sh -c

all

Auf der Konsole sind nun die Startmel-dungen der einzelnen Services zu sehenund am Ende sollte schließlich eine Sta-tuszeile Auskunft darüber erteilen, wielange die Startup-Prozedur dauerte:

19:58:19,965 INFO [ServerImpl]

JBoss (Microcontainer) [5.1.0.GA

(build:SVNTag=JBoss_5_1_0_GA

date=200905221634)] Started in

54s:991ms

Alternativ ist es auch möglich, den Serverim Hintergrund zu starten und die Sta-tus-Meldungen der einzelnen Services ineine Log-Datei zu schreiben. Das hat un-ter anderem den Vorteil, dass die Konsolenicht durch den Server belegt ist:

/opt/jboss-5.1.0.GA/bin/run.sh -c

all > console.log &

Ein Zugriff auf den Web-Container desServers sollte zu diesem Zeitpunkt bereitsfunktionieren (siehe Bild 3). Die Startseitebietet Zugriff auf diverse Online-Res-

Bild 2: Jedes JBoss-Konfigurationsverzeichnis enthält eine Vielzahl von Unterverzeichnissen, mit denen Sie das Verhalten des Server anpassen können

Die ersten Versionen von JBoss basierten auf einemsogenannten Java-Management-Extension Kernel(JMX). Sämtliche Services des Anwendungsserverswurden hier als Managed Beans (MBeans) in denJMX-Kernel geladen um Ihre Funktionen zur Verfügungzu stellen. Mit der Version AS4 begann dann die Mi-gration auf eine Microcontainer-Architektur, in der nunleichtgewichtige Plain Old Java Objects (POJOs) stattMBeans zum Einsatz kommen. MBeans unterstütztJBoss allerdings immer noch, da der JMX-Kernel nunselbst als POJO auf dem Microcontainer aufsetzt. Fürdie Zukunft ist geplant, sämtliche MBeans als reinePOJOs zu implementieren, so dass der Einsatz desJMX-Kernels nicht mehr notwendig ist

Architektur

Alle Listings zum Download auf www.it-administrator.de Juli 2011 51

P R A X I S I W o r k s h o p

sourcen und JBoss interne Applikationen,die sich zur Administration des Serversverwenden lassen.

Erste Java-Webanwendung bereitstellen Um nun die erste Schritte auf dem neu-en Server aufzuzeigen, beginnen wir andieser Stelle mit dem Bereitstellen einerJava-basierten Webanwendung mit Hilfedes JBoss Web-Services. Dieser basiertauf dem bekannten Tomcat für dynami-sche Inhalte, kann aber ebenfalls auf dieApache Portable Runtime (APR) zu-rückgreifen, wenn es darum geht, stati-sche Inhalte schnell auszuliefern. JBossunterstützt mit dem integrierten Web-Server von Haus aus das sogenannteHot-Deployment. Hierzu kopieren Siebeispielsweise die gewünschte Weban-wendung in ein bestimmtes Verzeichnisder aktiven Server-Konfiguration undJBoss stellt diese Anwendung unmittel-bar bereit.

Zuerst ist jedoch die entsprechende An-wendung zu erzeugen und vorzubereiten.Da die Entwicklung von komplexen An-wendungen den Rahmen dieses Artikelssprengen würde, greifen wir hier auf diebekannte “Hello World”-Anwendung zu-rück. Diese liegt hier als JavaServerPagevor. JBoss übersetzt diese dynamisch, er-zeugt ein Servlet und stellt dieses einemClient über eine Webschnittstelle zur Ver-fügung. Es existieren mehrere Methodendiese Anwendung nun bereitzustellen, bei-spielsweise in Form eines Webarchives(WAR-Archiv). Für dieses Archiv müssenSie zuerst eine entsprechende Verzeich-nis-Struktur erzeugen, wobei die JSP-Da-tei im Root-Verzeichnis liegt. Hier hingehört ebenfalls ein UnterverzeichnisWEB-INF mit einem Deployment-De-skriptor namens web.xml. Dieser Deploy-ment-Deskriptor ist Teil der JEE-Spezi-fikation, sodass auch Servlets von anderenServern unter JBoss lauffähig sind. Ser-ver-spezische Konfigurationsanweisungenliest JBoss aus der Datei WEB-INF/jboss-web.xml ein. Dazu zählt beispielsweise dieKonfiguration einer Security-Domäne fürIhre Anwendung. Hiermit können dannunter anderem Benutzer authentifiziertund autorisiert werden, bevor diese Zu-griff auf die Anwendung, oder Teile davon,erhalten. Die JSP-Datei sowie der De-ployment-Deskriptor sind in den beidenListingkästen dargestellt.

Mit Hilfe des Tools “jar” lässt sich aus die-sen Dateien nun ein WAR-Archiv erzeu-gen (siehe Listing “WAR-Archiv mit jarerzeugen”). Das so erzeugte Archiv ko-pieren Sie dann in das Host-Deployment-Verzeichnis des aktiven JBoss-Konfigura-

tionsverzeichnisses. JBoss nimmt in diesemFalle sofort Notiz von der neuen Web-Anwendung und stellt diese unmittelbarzur Verfügung. Der Aufruf von http://lo-calhost:8080/helloworld/hello.jsp im Web-browser bestätigt dies (siehe Bild 4).

# jar -cvf helloworld.war *.jsp

WEB-INF/

added manifest

adding: hello.jsp(in = 159)

(out= 131)(deflated 17%)

adding: WEB-INF/(in = 0)

(out= 0)(stored 0%)

adding: WEB-INF/web.xml(in = 63)

(out= 48)(deflated 23%)

# cp helloworld.war ../../jboss-

5.1.0.GA/server/all/deploy/

20:15:48,905 INFO [TomcatDeploy-

ment] deploy, ctxPath=/helloworld

Statt das WAR-Archiv in das Deploy-ment-Verzeichnis zu kopieren, lässt sichauch das bereits erwähnte Admin-Tooltwiddle verwenden. Mit Hilfe der Ope-ration deploy der JBoss MBean “jboss.sys-tem:service=MainDeployer” stellen Siedie Webanwendung auch dann bereit,wenn Sie beispielsweise gar kein Schreib-recht auf das Deployment-Verzeichnis be-sitzen. Ein Nachteil dieser Methode be-steht jedoch darin, dass die Anwendungnach einem Neustart des Servers nichtwieder automatisch gestartet wird.

# ./twiddle.sh invoke “jboss.sys-

tem:service=MainDeployer” deploy

/opt/examples/HelloWorld/hello-

world.war

Anstatt mit komprimierten Archiv-Da-teien, kann JBoss auch mit komplettenVerzeichnis-Strukturen umgehen. Dies istmanchmal einfacher als Archive bereitzu-stellen, da sich in Verzeichnissen einzelneDateien leichter verändern oder hinzu-fügen lassen, ohne das bei jeder Änderungein neues Archiv zu erzeugen ist. EinNeustart des Servers ist nach einer Än-derung an einer Anwendung nicht not-wendig, JBoss erkennt diese automatischanhand aktualisierter Zeitstempel an denDateien. Wichtig vor dem Bereitstellenganzer Verzeichnisse ist jedoch, dass dieseden passen Suffix besitzen, ansonsten weiß

Bild 3: Nach dem Hochfahren des Servers erhalten Sie über die Startseite des Web-Containers Zugriff auf diverse Anwendungen und Online-Ressourcen

<html><head><title>JSP Test</title>

<%!

String message = “Hello, World.”;

%>

</head>

<body bgcolor=”white”>

<h2><%= message%></h2>

<%= new java.util.Date() %>

</body></html>

Listing: JSP-Datei

<web-app>

<display-name>Hello World</display-name>

</web-app>

Listing: Deployment-Deskriptor

52 Juli 2011 www.it-administrator.de

P R A X I S I W o r k s h o p

der Server nicht, welcher Deployer zumBereitstellen zu verwenden ist:

# mv /opt/examples/helloworld/

/opt/examples/helloworld.war/

# rm -f /opt/jboss-

5.1.0.GA/server/all/deploy/

helloworld.war

10:25:22,371 INFO [TomcatDeploy-

ment] undeploy, ctxPath=/

helloworld

# cp -r

/opt/examples/helloworld.war/

/opt/jboss-5.1.0.GA/server/all/

deploy/

10:25:22,412 INFO [TomcatDeploy-

ment] deploy, ctxPath=/helloworld

Passende Server-KonfigurationNachdem Sie nun wissen, wie Sie eineeinfache Webanwendung auf dem JBossAS bereitstellen können, lohnt es sich, ei-nen genaueren Blick in die Konfigurationdes Servers zu werfen. Wie bereits weiteroben erwähnt, enthält JBoss AS mehrereKonfigurations-Verzeichnisse. Beim Star-ten des Servers wurde in unserem Beispieldie all-Konfiguration ausgewählt. Derentsprechende Konfigurationsordner/opt/jboss-5.1.0.GA/server/all enthält di-verse Unterverzeichnisse (siehe Bild 5).

Auch hier ist ein grundlegendes Verständ-nis der einzelnen Verzeichnisse wichtig:- * conf-Verzeichnis: Enthält sämtliche

Konfigurationsdateien für den JBoss-Kernservice, die einzelnen Services sowie wie für das Logging-Subsystemlog4j [4].

- * deploy-Verzeichnis: Dieser Ordnerwurde bereits im letzen Abschnitt vor-

gestellt. Sämtliche Anwendungen, diein dieses Verzeichnis kopiert werden, er-kennt JBoss automatisch und stellt diesedynamisch zur Verfügung. Zum Entfer-nen einer Anwendung ist diese einfachaus dem deploy-Verzeichnis zu löschen,oder besser, in ein undeploy-Verzeichniszu verschieben.

- * deployers-Verzeichnis: Enthält Serviceszum Erkennen der verschiedenen An-wendungs- und Archivtypen aus demdeploy-Verzeichnis.

- * lib-Verzeichnis: Enthält Bibliothekendie von sämtlichen JEE Services einergemeinsamen Serverkonfiguration ver-wendet werden. Spezielle Bibliothekendie nur zu einer einzelnen Anwendunggehören, stellen Sie lieber über die An-wendung selbst zur Verfügung – bei-spielsweise als Teil eines Webarchives.

Neben diesen Standard-Verzeichnissenerzeugt JBoss noch weitere Ordner zurLaufzeit. Hiervon sind besonders dieseinteressant:- * log-Verzeichnis: Enthält die Dateien

boot.log, server.log und eventuell audit.log(je nach Konfiguration). boot.log ent-hält alle Log-Meldung des Start-Pro-zesses des Servers, bis die Kontrollean log4j übergeben wird. Dieser Ser-vice schreibt die Meldungen dann indie Datei server.log. Das Sicherheits-Subsystem von Jboss verwendet dieDatei audit.log für sicherheitsrelevanteMeldungen.

- * work-Verzeichnis: Hier hält der JBossWebserver die übersetzten Java-ClassDateien und Servlets auf. Für die obenaufgeführte Webanwendung existierenhier beispielsweise die beiden Dateien

work/jboss.web/localhost/helloworld/org/apache/jsp/hello_jsp.class und work/jboss.web/localhost/helloworld/org apache/jsp/hello_jsp.java.

Zum Anpassen des Servers sind sicherlichdie Konfigurationsdateien unterhalb vonconf/ am interessantesten. Als Beispiel sollhier das Logging des JBoss-Servers etwasangepasst werden. Wie bereits erwähnt,setzt JBoss das log4j Logging-Frameworkein. In der Konfigurationsdatei conf/jboss-log4j.xml existieren in der Standardkon-figuration zwei sogenannte Appender.Diese bestimmen wohin die Logmeldun-gen der JBoss-Services oder der bereit-gestellten Anwendungen zu senden sind.Der erste Appender schreibt sämtlicheMeldungen aller Loglevel (TRACE, DE-BUG, INFO, WARN, ERROR and FA-TAL) in die Datei log/server.log und legtdabei einmal pro Tag eine neue Datei miteinem entsprechenden Datums-Suffix an(siehe Listing “WAR-Archiv mit jar er-zeugen”). Soll der Server stattdessen dieLog-Datei rotieren, sobald diese ein be-stimmte Größe erreicht hat, so sind dieAppender-Parameter entsprechend anzu-passen (siehe Listing “Anpassen der Ap-pender-Parameter”).

Der zweite Appender “CONSOLE” sorgtfür eine Ausgabe auf der Konsole. Jedochfindet diese erst ab dem Log-Level INFOstatt, wofür der Parameter “<param na-me=”Threshold” value=”INFO”/>” inder Konfiguration des Appenders zustän-dig ist. Somit vermeiden Sie, dass das Kon-solen-Log mit zu vielen Log-Meldungen

Bild 4: Im Webbrowser lässt sich schliesslich die Ausgabe der Webanwendung bewundern

<appender name=”FILE” class=”org.jboss.logging.ap-

pender.DailyRollingFileAppender”>

<errorHandler

class=”org.jboss.logging.util.OnlyOnceError

Handler”/>

<param name=”File”

value=”${jboss.server.log.dir}/server.log”/>

<param name=”Append” value=”true”/>

<param name=”DatePattern” value=”‘.’yyyy-

MM-dd”/>

<layout class=”org.apache.log4j.PatternLay

out”>

<param name=”ConversionPattern” value=”%d

%-5p [%c] (%t) %m%n”/>

</layout>

</appender>

Listing: WAR-Archiv mit jar erzeugen

www.it-administrator.de Juli 2011 53

P R A X I S I W o r k s h o p

überflutet wird. Natürlich ist es auch mög-lich, für die einzelnen Dateien oder Log-Level einzelne Log-Dateien zu erzeugen.Hierfür existieren in der Kategorie “Limitcategories” Einstellmöglichkeiten, die sichauf einem Appender mit einem bestimm-ten Namen beziehen (dieser ist hier alsReferenz anzugeben), und das Loggingeiner bestimmten Klasse oder einer An-wendung die von diese Klasse abgeleitetist, ab einen bestimmten Log-Level defi-niert. Die Konfigurationsdatei bietet hier-für sehr viele Beispiele.

Unnötige Dienste abschaltenIn den bisherigen Beispielen wird derJBoss-Server immer mit der Konfigu-rationseinstellung “all” gestartet. Hier-durch stehen sämtliche Services undKompontenten des Servers zur Verfü-gung. Für Test- und Entwicklungssys-teme mag dies sicherlich in Ordnungsein, für Systeme in der Produktion giltdies jedoch nicht. Hier gilt der Grund-satz “Weniger ist mehr”. Wieso soll derServer Dienste anbieten die gar nichtbenötigt werden? Diese stellen nur einunnötiges Sicherheitsrisiko dar und soll-ten somit deaktiviert, oder noch besser,entfernt werden.

Mit der Konfiguration “all” startet JBoss25 verschiedene Services, mit der Kon-figuration “default” sind es dagegen lediglich 15 Services. Der Hauptunter-schied zwischen den beiden Konfigura-tion liegt darin, dass mit “all” sämtlicheCluster-Dienste zur Verfügung stehen,mit “default” jedoch nicht. Wenn Sie also

keinen Cluster benötigen, so reicht dieStandard-Konfiguration sicherlich aus.Jedoch bietet es sich an, selbst diese Kon-figuration noch etwas abzuspecken, fallsSie auf bestimmte Dienste verzichtenkönnen. Hierfür ist zuerst ein neuesKonfigurationsverzeichnis auf Basis derdefault-Konfiguration zu erzeugen:

# cp -r /opt/jboss-

5.1.0.GA/server/default

/opt/jboss-5.1.0.GA/server/custom

In dem Verzeichnis “custom” können Sienun sämtliche Services deaktivieren, dienicht unbedingt notwendig sind. Beispiels-weise soll auf einem Produktionssystemsicherlich nicht die JBoss-Startseite sichtbarsein. Entfernen Sie diese einfach, indemSie in custom/deploy/ROOT.war löschenoder umbenennen. Ist der Mail-Servicenicht wirklich notwendig, so löschen Siedie Dateien custom/deploy/mail-service.xmlund custom/lib/mail*.jar. Ein Blick in dasdeploy- und lib-Verzeichnis hilft weitereunnötige Services zu identifizieren.

JBoss bietet von Haus aus einige Manage-ment-Tools an, dazu zählt beispielsweisedie JMX-Console, die unter der URLhttp://localhost:8080/jmx-console/ zu er-reichen ist. Mit der Konsole haben Nutzerdie Möglichkeit, ManagedBeans (MBeans)des Servers zu lesen und zu verändern.Die weiter oben angesprochenen Ände-rungen am Logging-Subsystem hätten soauch mit der JMX-Console durchgeführtwerden können. Somit stellt diese Web-anwendung eine mächtige, aber auch ge-fährliche Möglichkeit dar, den komplettenJBoss-Server zu konfigurieren. Auf einemProduktionssystem ist die Konsole somitentweder zu entfernen (deploy/jmx-conso-le.war) oder aber der Zugang ist mit Hilfeeiner Benutzerauthentifizierung entspre-chend zu sichern.

Authentifizierung und AutorisierungDas Sicherheitssystem von JBoss basiertauf dem Java Authentication and Autho-rization Service (JAAS). Über Sicherheits-Domänen legen Sie hier fest, welche Artvon Login-Modulen für eine bestimmteAnwendung zum Einsatz kommen soll.Es existieren bereits vorgefertigte Login-

Module für den Zugriff auf Datenbanken,LDAP-Server oder einfache Dateien. Isteine Webandwendung für eine bestimmteSicherheits-Domäne konfiguriert, so musssich ein Benutzer beim Zugriff auf dieseauthentifizieren und bekommt nach er-folgreicher Authentifizierung und Auto-risierung eine bestimmte Rolle zugewie-sen. Anhand dieser Rolle kann der Adminfestlegen, ob welche Teile der Webanwen-dung der Benutzer zugreifen darf. Einevordefinierte Sicherheits-Domäne für dieJMX-Console finden Sie im entsprechen-den Listing.

Bei diesem Login-Modul handelt es sichum eine einfache Variante, bei der die Au-thentifizierung und Autorisierung vonBenutzern anhand von Dateien stattfin-det. Komplexere Beispiele für den Zugriffauf eine Datenbank oder einen LDAP-Server befinden sich jedoch ebenfalls inder Datei conf/login-config.xml. Damit eineAnwendung nun weiß, welche Sicher-heitsdomäne zum Einsatz kommen soll,ist diese im JBoss-eigenen Deployment-Deskriptor der Anwendung, jboss-web.xmlzu hinterlegen. Hier tragen Sie den Na-men der Domäne ein, mit der diese sichüber das Java Naming and Directory Interface (JNDI) auf dem Server ange-meldet hat. Im Falle der JMX-Consoleist die Änderung also in der Dateideploy/jmx-console.war/WEB-INF/jboss-web.xml zu erfolgen:

<jboss-web>

<security-domain>java:/jaas/jmx-

console</security-domain>

</jboss-web>

<appender name=”FILE” class=”org.jboss.logging.ap-

pender.RollingFileAppender”>

<errorHandler

class=”org.jboss.logging.util.OnlyOnceError

Handler”/>

<param name=”File”

value=”${jboss.server.log.dir}/server.log”/>

<param name=”Append” value=”false”/>

<param name=”MaxFileSize” value=”10MB”/>

<param name=”MaxBackupIndex” value=”20”/>

<layout class=”org.apache.log4j.PatternLay

out”>

<param name=”ConversionPattern” value=”%d

%-5p [%c] (%t) %m%n”/>

</layout>

</appender>

Listing: Anpassen der Appender-Parameter

<application-policy name=”jmx-console”>

<authentication>

<login-module

code=”org.jboss.security.auth.spi.UsersRoles

LoginModule”

flag=”required”>

<module-option

name=”usersProperties”>props/jmx-console-

users.properties</module-option>

<module-option

name=”rolesProperties”>props/jmx-console-

roles.properties</module-option>

</login-module>

</authentication>

</application-policy>

Listing: Sicherheits-Domäne für die JMX-Console

54 Juli 2011 Link-Codes eingeben auf www.it-administrator.de

P R A X I S I W o r k s h o p

Hiermit ist nun klar, welche Sicherheits-Domäne und somit, welches Login-Mo-dul, für die JMX-Console zum Einsatzkommt. Es fehlt jedoch noch ein Regel-werk, welches bestimmt, wer Zugriff aufwelche Ressourcen hat. Diese Informa-tion ist der Anwendung nun über denregulären Deployment-Deskriptor de-ploy/jmx-console.war/WEB-INF/web.xmlmitzuteilen:

<security-constraint>

<web-resource-collection>

<web-resource-name>HtmlAdap

tor</web-resource-name>

<description>Eine beispiel

hafte Sicherheitseinstellung

die nur Nutzern mit der

Rolle JBossAdmin den Zugriff

auf die HTML JMX-Webappli-

kation erlaubt

</description>

<url-pattern>/*</url-pattern>

<http-method>GET</http-

method>

<http-method>POST</http-

method>

</web-resource-collection>

<auth-constraint>

<role-name>JBossAdmin</role-

name>

</auth-constraint>

</security-constraint>

Fehlen schließlich noch Benutzerac-count-Daten. Wie im Login-Modul fürdie Anwendung festgelegt, kommen die-se aus den beiden Dateien props/jmx-console-users.properties für die Benutzer-Namen und Passwör ter, und ausprops/jmx-console-roles.properties für dieZuordnung einer Rolle zu einem Ac-count. Anhand des Beispiels muss einBenutzer nun also der Rolle “JBossAd-min” angehören, damit dieser Zugriffauf die Konsole bekommt. Hat allesfunktioniert, solle diesmal beim Aufrufvon http://localhost:8080/jmx-console/ein Fenster aufgehen, welches den Be-nutzer zur Authentifizierung auffordert(siehe Bild 5).

Andere Webanwendungen lassen sich nunauf ähnliche Art und Weise für eine Be-nutzer-Authentizierung und Autorisierungkonfigurieren. Wichtig dabei ist, dass dieverwendete Sicherheits-Domäne sich zu-vor beim JNDI registriert hat.

Sichere KommunikationAbschliessend geht es um die Konfigu-ration für einen sicheren Zugriff auf ei-ne Webanwendung. Dies ist besondersdann wichtig, wenn die Anwendungsensible Daten überträgt und selbststän-dig eine Benutzer-Authentifizierungdurchführt, wozu dann wahrscheinlichauch die Übertragung eines Benutzer-Passwortes gehört. Für eine gesichertehttps-Verbindung ist dem JBoss-Serverein zusätzlicher Web-Connector hinzu-zufügen. Vor dessen Konfiguration istjedoch erst ein Zertifikatsspeicher zuerzeugen. Dieser Speicher enthält einX.509-Zertifikat welches entwederselbst signiert wurde, oder über die Sig-natur einer externen Zertifizierungs-stelle (CA) verfügt. Mit Hilfe der Java-Anwendung keytool läs s t s ich einsolcher Zertifikatsspeicher anlegen.

Um schließlich den https-Port des Web-connectors zu aktivieren, müsen Sie inder Konfigurationsdatei des JBoss Web-

Services, deploy/jbossweb.sar/server.xml,der soeben erzeugte Zertifikatsspeicher,inklusive des dazugehörigen Passwortes,ausführen:

<Connector protocol=”HTTP/1.1”

SSLEnabled=”true”

port=”8443”

address=”${jboss.bind.address}”

scheme=”https”

secure=”true” clientAuth=”false”

keystoreFile=”${jboss.server.home.

dir}/conf/tuxgeek.keystore”

keystorePass=”redhat”

sslProtocol = “TLS”

/>

Ab nun stehen sämtliche Webanwen-dungen auch über den gesichertenhttps-Port 8443 zur Verfügung und bie-ten somit eine verschlüsselte Übertra-gung der Daten an.

FazitNatürlich kann dieser Artikel nicht sämt-liche Konfigurationsmöglichkeiten desJBoss-Applikationsservers vorstellen, da-für ist die Thematik zu umfangreich. In-teressante Themen die bisher nicht an-gesprochen wurden sind beispielsweisedie Enterprise Java Beans (EJBs) und dasJBoss-Clustering. Mit EJBs ist es mög-lich, komplexe Anwendungen zu mo-dularisieren und somit die eigentlicheGeschäftslogik aus der Anwendung he-rauszutrennen. Das JBoss-Cluster ingsorgt für eine hochverfügbare Konfigu-ration des Servers. Weitere Informationenzu diesen und weiteren Themen bietetdie ausführliche Dokumentationsseitedes JBoss-Projektes [5]. (dr)

# keytool -genkey -alias example -keystore tuxge-

ek.keystore -keyalg RSA

keytool -genkey -alias example -keystore

tuxgeek.keystore -keyalg RSA

Enter keystore password:

Re-enter new password:

What is your first and last name?

[Unknown]: tiffy.tuxgeek.de

What is the name of your organizational unit?

[Unknown]: GPS

What is the name of your organization?

[Unknown]: Red Hat

What is the name of your City or Locality?

[Unknown]: Stuttgart

What is the name of your State or Province?

[Unknown]: BW

What is the two-letter country code for this unit?

[Unknown]: DE

Is CN=tiffy.tuxgeek.de, OU=GPS, O=Red Hat,

L=Stuttgart, ST=BW, C=DE correct?

[no]: yes

Enter key password for <example>

(RETURN if same as keystore password):

Re-enter new password:

# keytool -list -keystore tuxgeek.keystore

Enter keystore password:

Keystore type: JKS

Keystore provider: SUN

Your keystore contains 1 entry

example, Mar 25, 2011, PrivateKeyEntry,

Certificate fingerprint (MD5):

AC:D5:CB:5C:13:9D:EF:F2:85:6B:AB:89:49:F8:48:3A

Listing: Zertifikatsspeicher mit keytool

[1] Java EE-SpezifikationB7P61

[2] Java EJB-TechnologieB7P62

[3] JBoss Community SeiteB7P63

[4] log4j ProjektseiteB7P64

[5] JBoss DokumentationB7P65

Link-Codes

EAZ Social Networks

1/1

Anschnitt

Recommended