Darmowy fragment publikacji:
IDZ DO
IDZ DO
PRZYK£ADOWY ROZDZIA£
PRZYK£ADOWY ROZDZIA£
SPIS TREŒCI
SPIS TREŒCI
KATALOG KSI¥¯EK
KATALOG KSI¥¯EK
KATALOG ONLINE
KATALOG ONLINE
ZAMÓW DRUKOWANY KATALOG
ZAMÓW DRUKOWANY KATALOG
TWÓJ KOSZYK
TWÓJ KOSZYK
DODAJ DO KOSZYKA
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
CENNIK I INFORMACJE
ZAMÓW INFORMACJE
ZAMÓW INFORMACJE
O NOWOŒCIACH
O NOWOŒCIACH
ZAMÓW CENNIK
ZAMÓW CENNIK
CZYTELNIA
CZYTELNIA
FRAGMENTY KSI¥¯EK ONLINE
FRAGMENTY KSI¥¯EK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
JBoss 4.0. Podrêcznik
administratora
Autor: The JBoss Group
T³umaczenie: Adam Bochenek, Piotr Rajca
ISBN: 83-246-0092-2
Tytu³ orygina³u: JBoss 4.0 – The Official Guide
Format: B5, stron: 616
Kompendium wiedzy o profesjonalnym serwerze aplikacji
(cid:129) Proces instalacji i konfiguracji
(cid:129) Tworzenie i udostêpnianie aplikacji
(cid:129) Administrowanie serwerem i zabezpieczanie go
Technologia J2EE œwiêci triumfy. Programiœci na ca³ym œwiecie stosuj¹ j¹ do tworzenia
rozbudowanych aplikacji korporacyjnych i e-commerce. Jednym z integralnych
elementów systemu zbudowanego w tej technologii jest odpowiedni serwer aplikacji.
Na rynku dostêpnych jest kilka platform komercyjnych i zyskuj¹cy na popularnoœci
produkt open-source — JBoss. JBoss to w pe³ni profesjonalny serwer aplikacji J2EE,
który dziêki bezp³atnemu dostêpowi znacznie redukuje koszty wdro¿enia systemów
informatycznych. Oczywiœcie to nie jedyna zaleta JBossa — trudno pomin¹æ jego
stabilnoœæ i bezpieczeñstwo, wsparcie ze strony tysiêcy u¿ytkowników z ca³ego œwiata
i modu³ow¹ budowê, która pozwala na szybkie dodawanie kolejnych us³ug.
„JBoss 4.0. Podrêcznik administratora” to wyczerpuj¹ce Ÿród³o informacji
o najnowszej edycji JBossa. Autorami s¹ twórcy JBossa, co gwarantuje wysoki poziom
merytoryczny. Znajdziesz tu omówienie wszystkich zastosowañ serwera oraz poznasz
sposoby tworzenia i wdra¿ania aplikacji J2EE wykorzystuj¹cych komponenty EJB,
serwlety, JMS i us³ugi sieciowe. Przeczytasz równie¿ o bezpieczeñstwie serwera
i aplikacji oraz obs³udze baz danych i transakcji. Ksi¹¿ka zawiera szczegó³owy opis
j¹dra JBossa, technologii Hibernate oraz programowania aspektowego.
(cid:129) Instalacja serwera
(cid:129) Domyœlna struktura katalogów
(cid:129) Pliki konfiguracyjne JBossa
(cid:129) Zastosowanie mechanizmów JNDI
(cid:129) Obs³uga transakcji
(cid:129) EJB i serwlety
(cid:129) Stosowanie us³ugi JMS
(cid:129) Zabezpieczanie serwera JBoss
(cid:129) Korzystanie z us³ugi Tomcat
(cid:129) Mapowanie tabel baz danych na obiekty za pomoc¹ Hibernate
(cid:129) Programowanie aspektowe
Poznaj architekturê serwera JBoss i skonfiguruj go tak,
aby pracowa³ z maksymaln¹ wydajnoœci¹
Spis treści
Rozdział 1.
O autorach ..................................................................................... 11
Wprowadzenie ................................................................................ 13
Instalacja i kompilacja serwera JBoss ............................................. 23
Pobranie plików binarnych ............................................................................................. 24
Warunki instalacji .................................................................................................... 24
Instalacja serwera przy użyciu pakietu zawierającego wersję binarną ........................... 24
Struktura katalogów serwera JBoss .......................................................................... 25
Domyślny zestaw konfiguracyjny serwera ............................................................... 25
confjboss-minimal.xml ........................................................................................... 27
confjboss-service.xml ............................................................................................. 27
confjboss.web ......................................................................................................... 27
confjndi.properties .................................................................................................. 27
conflog4j.xml .......................................................................................................... 28
conflogin-config.xml ............................................................................................... 28
confserver.policy ..................................................................................................... 28
confstandardjaws.xml ............................................................................................. 28
confstandardjboss.xml ............................................................................................. 28
confstandardjbosscmp-jdbc.xml .............................................................................. 28
confxmdesc*-mbean.xml ....................................................................................... 28
deploysh-deployer.xml .......................................................................................... 28
deploycache-invalidation-service.xml ..................................................................... 29
deployclient-deployer-service.xml .......................................................................... 29
deployear-deployer.xml .......................................................................................... 29
deployejb-deployer.xml .......................................................................................... 29
deployhsqldb-ds.xml ............................................................................................... 29
deployhttp-invoker.sar ............................................................................................ 29
deployjboss-aop.deployer ....................................................................................... 29
deployjboss-hibernate.deployer ............................................................................... 30
deployjboss-local-jdbc.rar ....................................................................................... 30
deployjboss-ws4ee.sar ............................................................................................. 30
deployjboss-xa-jdbc.rar ........................................................................................... 30
deployjbossjca-service.sar ....................................................................................... 30
deployjbossweb-tomcat50.sar ................................................................................. 30
deployjmshsqldb-jdbc2-service.xml ...................................................................... 30
deployjmsjbossmq-destinations-service.xml .......................................................... 31
deployjmsjbossmq-httpil.sar .................................................................................. 31
4
JBoss 4.0. Podręcznik administratora
Rozdział 2.
deployjmsjbossmq-service.xml .............................................................................. 31
deployjmsjms-ds.xml ............................................................................................. 31
deployjmsjms-ra.rar ............................................................................................... 31
deployjmsjvm-il-service.xml ................................................................................. 31
deployjmsuil2-service.xml ..................................................................................... 31
deployjmx-console.war ........................................................................................... 32
deployjmx-invoker-service.sar ................................................................................ 32
deploymail-ra.rar ..................................................................................................... 32
deploymail-service.xml ........................................................................................... 32
deploymanagementconsole-mgr.sar oraz web-console.war ................................... 32
deploymonitoring-service.xml ................................................................................ 32
deployproperties-service.xml .................................................................................. 33
deployscheduler-service.xml oraz schedule-manager-service.xml .......................... 33
deploysqlexception-service.xml .............................................................................. 33
deployuuid-key-generator.sar .................................................................................. 33
Sprawdzenie poprawności instalacji ............................................................................... 33
Ładowanie z serwera sieciowego ................................................................................... 35
Samodzielna kompilacja serwera JBoss na podstawie kodów źródłowych .................... 37
Dostęp do repozytorium CVS znajdującego się w serwisie SourceForge ................ 37
Repozytorium CVS .................................................................................................. 38
Anonimowy dostęp do CVS ..................................................................................... 38
Klient CVS ............................................................................................................... 39
Tworzenie dystrybucji serwera na podstawie kodu źródłowego .............................. 39
Kompilacja serwera na podstawie pobranego
z repozytorium CVS kodu źródłowego ................................................................... 39
Drzewo katalogów zawierających kod źródłowy serwera ........................................ 40
Korzystanie z predefiniowanego zestawu testów JBoss ........................................... 40
Jądro serwera JBoss ....................................................................... 45
JMX ................................................................................................................................ 45
Wprowadzenie do JMX ............................................................................................ 46
Serwer JBoss jako implementacja architektury JMX ..................................................... 52
Architektura ładowania klas serwera JBoss ............................................................. 52
Ładowanie klas i typy języka Java ........................................................................... 52
Komponenty XMBean serwera JBoss ...................................................................... 74
Połączenie z serwerem JMX .......................................................................................... 81
Podglądanie serwera — konsola JMX ..................................................................... 81
Połączenie z JMX za pomocą RMI .......................................................................... 85
Dostęp do JMX z wiersza poleceń ........................................................................... 88
Łączenie z JMX za pomocą innych protokołów ....................................................... 93
JMX jako mikrojądro ..................................................................................................... 93
Proces uruchamiania serwera ................................................................................... 94
Usługi MBean serwera JBoss ................................................................................... 95
Tworzenie usług MBean ........................................................................................ 107
Zależności i kolejność wdrażania ........................................................................... 121
Architektura usług wdrażających serwera JBoss .......................................................... 131
Obiekty wdrażające a classloadery ......................................................................... 134
Udostępnianie zdarzeń komponentów MBean przez protokół SNMP .......................... 135
Usługa zamiany zdarzenia na pułapkę ................................................................... 137
Zdalny dostęp do usług, wydzielone usługi wywołujące .............................................. 137
Przykład użycia wydzielonej usługi wywołującej
— usługa adaptora wywołań komponentu MBeanServer .................................... 140
JRMPInvoker — transport przy użyciu protokołu RMI/JRMP .............................. 147
PooledInvoker — transport przy użyciu RMI/gniazdo ........................................... 148
IIOPInvoker — transport przy użyciu RMI/IIOP ................................................... 148
Spis treści
5
JRMPProxyFactory — tworzenie dynamicznych pośredników JRMP .................. 149
HttpInvoker — RMI/HTTP Transport ................................................................... 149
HA JRMPInvoker — klastrowy transport RMI/JRMP ........................................... 150
HA HttpInvoker — klastrowy transport RMI/HTTP ............................................. 150
HttpProxyFactory — tworzenie dynamicznych pośredników HTTP ..................... 151
Czynności pozwalające udostępnić dowolny interfejs RMI
przez protokół HTTP ........................................................................................... 152
Rozdział 3. Obsługa nazw ............................................................................... 155
Ogólna charakterystyka JNDI ...................................................................................... 155
JNDI API ............................................................................................................... 156
J2EE i JNDI — środowisko komponentu aplikacji ................................................ 158
Architektura JBossNS .................................................................................................. 170
Fabryki tworzące obiekt kontekstu początkowego — InitialContext ..................... 173
Dostęp do JNDI przy użyciu HTTP ....................................................................... 178
Dostęp do JNDI przy użyciu HTTPS ..................................................................... 181
Bezpieczny dostęp do JNDI przy użyciu HTTP ..................................................... 183
Bezpieczny dostęp do JNDI
za pomocą niezabezpieczonego kontekstu tylko do odczytu ............................... 185
Dodatkowe komponenty związane z usługą nazw ................................................. 187
Rozdział 4. Transakcje ................................................................................... 193
Transakcje i JTA — wprowadzenie ............................................................................. 193
Blokowanie pesymistyczne i optymistyczne .......................................................... 194
Składniki transakcji rozproszonej .......................................................................... 195
Dwufazowy protokół XA ....................................................................................... 196
Wyjątki heurystyczne ............................................................................................. 196
Tożsamość i gałęzie transakcji ............................................................................... 197
Obsługa transakcji w serwerze JBoss ........................................................................... 197
Podłączenie menedżera transakcji do serwera JBoss ............................................. 198
Domyślny menedżer transakcji .............................................................................. 199
Obsługa interfejsu UserTransaction ....................................................................... 200
Rozdział 5. Komponenty EJB w JBoss ............................................................. 201
Komponenty EJB widziane z perspektywy klienta ...................................................... 201
Ustalenie konfiguracji pełnomocnika EJB ............................................................. 205
Komponenty EJB widziane z perspektywy serwera ..................................................... 210
Wydzielona usługa wywołująca — doręczyciel żądań ........................................... 210
Transport przy użyciu RMI/JRMP w środowisku klastrowym
— JRMPInvokerHA ............................................................................................ 214
Transport przy użyciu RMI/HTTP w środowisku klastrowym
— HTTPInvokerHA ............................................................................................ 214
Kontener EJB ............................................................................................................... 216
Komponent MBean EJBDeployer .......................................................................... 216
Struktura kontenera bazująca na modułach ............................................................ 231
Blokowanie komponentów encyjnych i wykrywanie zakleszczeń ............................... 243
Dlaczego blokowanie jest potrzebne ...................................................................... 244
Cykl życia komponentu encyjnego ........................................................................ 244
Domyślna strategia blokowania ............................................................................. 245
Dodatkowe obiekty przechwytujące i reguły blokowania ...................................... 245
Zakleszczenie ......................................................................................................... 246
Zaawansowana konfiguracja i optymalizacja ......................................................... 249
Uruchamianie komponentów w środowisku klastrowym ....................................... 251
Rozwiązywanie problemów ................................................................................... 251
6
JBoss 4.0. Podręcznik administratora
Rozdział 6. Usługa komunikatów JMS w JBoss ................................................ 253
Przykłady użycia JMS .................................................................................................. 253
Przykład komunikacji typu punkt-punkt ................................................................ 254
Przykład komunikacji typu wydawca-abonent ....................................................... 256
Przykład komunikacji wydawca-abonent z obsługą trwałego tematu .................... 261
Przykład komunikacji punkt-punkt połączonej
z użyciem komponentu sterowanego komunikatami (MDB) ............................... 264
Ogólna charakterystyka JBossMQ ............................................................................... 271
Usługi warstwy wywoływań .................................................................................. 271
Usługa SecurityManager ........................................................................................ 272
Usługa DestinationManager ................................................................................... 272
Usługa MessageCache ........................................................................................... 272
Usługa StateManager ............................................................................................. 273
Usługa PersistenceManager ................................................................................... 273
Miejsce docelowe komunikatów ............................................................................ 273
Konfiguracja komponentów MBean wchodzących w skład JBossMQ ........................ 274
Komponent org.jboss.mq.il.jvm.JVMServerILService .......................................... 275
Komponent org.jboss.mq.il.uil2.UILServerILService ............................................ 275
Komponent org.jboss.mq.il.http.HTTPServerILService ........................................ 278
Komponent org.jboss.mq.server.jmx.Invoker ........................................................ 279
Komponent org.jboss.mq.serwer.jmx.InterceptorLoader ....................................... 280
Komponent org.jboss.mq.sm.jdbc.JDBCStateManager ........................................... 280
Komponent org.jboss.mq.security.SecurityManager .............................................. 280
Komponent org.jboss.mq.server.jmx.DestinationManager .................................... 281
Komponent org.jboss.mq.server.MessageCache .................................................... 283
Komponent org.jboss.mq.pm.jdbc2.PersistenceManager ....................................... 284
Komponenty MBean reprezentujące miejsca docelowe ............................................. 286
Określanie dostawcy JMS dla kontenera MDB ............................................................ 290
Komponent org.jboss.jms.jndi.JMSProviderLoader .............................................. 291
Komponent org.jboss.jms.asf.ServerSessionPoolLoader ....................................... 293
Integracja z innymi dostawcami JMS ..................................................................... 293
Rozdział 7.
JCA w JBoss ................................................................................. 295
Ogólna charakterystyka JCA ........................................................................................ 295
Architektura JBossCX .................................................................................................. 297
Komponent BaseConnectionManager2 .................................................................. 299
Komponent RARDeployment ................................................................................ 300
Komponent JBossManagedConnectionPool .......................................................... 301
Komponent CachedConnectionManager ................................................................ 302
Przykładowy szkielet adaptera zasobów JCA ........................................................ 303
Konfiguracja źródeł danych JDBC ............................................................................... 310
Konfiguracja ogólnych adapterów JCA ........................................................................ 319
Rozdział 8. Bezpieczeństwo ............................................................................ 323
Deklaratywny model obsługi bezpieczeństwa J2EE ..................................................... 323
Referencje — element security-role-ref ................................................................. 324
Tożsamość — element security-identity ................................................................ 325
Role — element security-role ................................................................................ 326
Uprawnienia wywoływania metod ......................................................................... 328
Uprawnienia dotyczące aplikacji sieciowych ......................................................... 331
Obsługa bezpieczeństwa deklaratywnego w serwerze JBoss ................................. 333
Wprowadzenie do JAAS .............................................................................................. 334
Czym jest JAAS? ................................................................................................... 334
Spis treści
7
Model bezpieczeństwa serwera JBoss .......................................................................... 339
Obsługa bezpieczeństwa deklaratywnego w serwerze JBoss, odsłona druga ......... 341
Architektura JBossSX .................................................................................................. 346
W jaki sposób JaasSecurityManager korzysta z JAAS .......................................... 348
Komponent JaasSecurityManagerService .............................................................. 351
Komponent JaasSecurityDomain ........................................................................... 353
Komponent ładujący plik XML z konfiguracją logowania .................................... 355
Komponent zarządzający konfiguracją logowania ................................................. 357
Używanie i tworzenie modułów logowania JBossSX ............................................ 358
Usługa DynamicLoginConfig ................................................................................ 382
Protokół Secure Remote Password (SRP) .................................................................... 383
Udostępnianie informacji o hasłach ....................................................................... 388
Szczegóły działania algorytmu SRP ....................................................................... 390
Uruchamianie serwera JBoss z użyciem menedżera bezpieczeństwa Java 2 ................ 396
Zastosowanie protokołu SSL przy użyciu JSSE ........................................................... 399
Konfiguracja serwera JBoss działającego za firewallem .............................................. 403
Zabezpieczanie serwera JBoss ...................................................................................... 404
Usługa jmx-console.war ......................................................................................... 405
Usługa web-console.war ........................................................................................ 405
Usługa http-invoker.sar .......................................................................................... 405
Usługa jmx-invoker-adaptor-server.sar .................................................................. 405
Rozdział 9. Aplikacje sieciowe ........................................................................ 407
Usługa Tomcat ............................................................................................................. 407
Plik konfiguracyjny serwera Tomcat — server.xml ..................................................... 409
Element Connector ................................................................................................. 409
Element Engine ............................................................................................................ 412
Element Host ................................................................................................................ 412
Element DefaultContext ......................................................................................... 413
Element Logger ...................................................................................................... 413
Element Valve ........................................................................................................ 413
Korzystanie z protokołu SSL w zestawie JBoss/Tomcat .............................................. 414
Ustalenie kontekstu głównego aplikacji sieciowej ....................................................... 417
Konfiguracja hostów wirtualnych ................................................................................ 418
Dostarczanie treści statycznej ....................................................................................... 419
Połączenie serwerów Apache i Tomcat ........................................................................ 419
Praca w środowisku klastrowym .................................................................................. 420
Integracja z innymi kontenerami serwletów ................................................................. 421
Klasa AbstractWebContainer ................................................................................. 422
Rozdział 10. Inne usługi MBean ........................................................................ 431
Zarządzanie właściwościami systemowymi ................................................................. 431
Zarządzanie edytorem właściwości .............................................................................. 432
Wiązanie usług ............................................................................................................. 433
Planowanie zadań ......................................................................................................... 437
Komponent org.jboss.varia.scheduler.Scheduler .................................................... 438
Usługa Log4j ................................................................................................................ 441
Dynamiczne ładowanie klas RMI ................................................................................. 441
Rozdział 11. Mechanizm CMP .......................................................................... 443
Przykładowy program .................................................................................................. 443
Włączanie rejestracji informacji testowych ............................................................ 445
Uruchamianie przykładów ..................................................................................... 445
Struktura jbosscmp-jdbc ............................................................................................... 447
8
JBoss 4.0. Podręcznik administratora
Komponenty encyjne .................................................................................................... 449
Odwzorowania encji .............................................................................................. 451
Pola CMP ..................................................................................................................... 456
Deklaracja pól CMP ............................................................................................... 456
Odwzorowania kolumn pól CMP ........................................................................... 457
Pola tylko do odczytu ............................................................................................. 460
Nadzór dostępu do encji ......................................................................................... 460
Zależne klasy wartości ........................................................................................... 462
Relacje zarządzane przez kontener ............................................................................... 466
Abstrakcyjne metody dostępu do pól cmr-field ..................................................... 467
Deklaracja relacji ................................................................................................... 467
Odwzorowanie relacji ............................................................................................ 469
Deklarowanie zapytań .................................................................................................. 476
Deklarowanie metod wyszukujących i wybierających ........................................... 477
Deklarowanie zapytań EJB-QL .............................................................................. 477
Przesłanianie odwzorowania EJB-QL na SQL ....................................................... 478
JBossQL ................................................................................................................. 480
DynamicQL ............................................................................................................ 481
DeclaredSQL .......................................................................................................... 482
Zapytania EJB-QL 2.1 oraz SQL92 ....................................................................... 487
Niestandardowe metody wyszukujące BMP .......................................................... 488
Ładowanie zoptymalizowane ....................................................................................... 488
Scenariusz ładowania ............................................................................................. 489
Grupy ładowania .................................................................................................... 490
Odczyt z wyprzedzeniem ....................................................................................... 491
Proces ładowania .......................................................................................................... 499
Opcje zatwierdzania ............................................................................................... 499
Proces ładownia aktywnego ................................................................................... 500
Proces odczytu z opóźnieniem ............................................................................... 501
Zbiory wyników odczytu z opóźnieniem ............................................................... 505
Transakcje .................................................................................................................... 505
Blokowanie optymistyczne .......................................................................................... 508
Polecenia encyjne oraz generacja klucza głównego ..................................................... 512
Istniejące polecenia encji ....................................................................................... 513
Domyślne ustawienia globalne serwera JBoss ............................................................. 515
Elementy ustawień globalnych ............................................................................... 517
Adaptacja źródła danych .............................................................................................. 519
Odwzorowania typów ............................................................................................ 519
Odwzorowania funkcji ........................................................................................... 523
Odwzorowania typów ............................................................................................ 523
Odwzorowania typów użytkownika ....................................................................... 524
Rozdział 12. Usługi sieciowe ............................................................................ 527
Punkty końcowe usług JAX-RPC ................................................................................. 527
Punkty końcowe komponentów Enterprise JavaBean .................................................. 533
Klienty usług sieciowych — klient JAX-RPC ............................................................. 536
Referencje usług ........................................................................................................... 538
Rozdział 13. Hibernate ..................................................................................... 543
MBean Hibernate ......................................................................................................... 543
Archiwa Hibernate ....................................................................................................... 545
Stosowanie obiektów Hibernate ................................................................................... 547
Stosowanie pliku HAR wewnątrz pliku EAR ............................................................... 548
Mechanizm wdrażania plików HAR ............................................................................ 549
Spis treści
9
Rozdział 14. Obsługa programowania aspektowego (AOP) ................................. 551
AOP w JBossie — usługi w stylu EJB dla zwyczajnych obiektów Javy ...................... 551
Dlaczego AOP? ............................................................................................................ 551
Podstawowe pojęcia związane z AOP .......................................................................... 553
Punkty łączeń i wywołania ..................................................................................... 553
Rady i aspekty ........................................................................................................ 553
Linie podziału ........................................................................................................ 554
Wstawienia oraz mieszanie .................................................................................... 557
Przygotowywanie aplikacji AOP na serwerze JBoss .................................................... 558
Kompilacja do postaci kodów bajtowych ............................................................... 558
Kompilacja adnotacji ............................................................................................. 558
Przygotowywanie AOP .......................................................................................... 559
Mechanizm wdrażania aplikacji AOP na serwerze JBoss ............................................ 560
Instalacja najnowszej wersji usługi jboss-aop.deployer ............................................. 561
Konfiguracja usługi AOP ....................................................................................... 561
Biblioteka gotowych aspektów .............................................................................. 562
Pakowanie i wdrażanie aplikacji AOP na serwerze JBoss ............................................ 563
Stosowanie gotowych aspektów ............................................................................. 565
Tworzenie własnych aspektów ............................................................................... 567
Pakowanie i wdrażanie niestandardowych aspektów ............................................. 568
Dodatek A Publiczna licencja GNU ................................................................. 573
Dodatek B Instalacja przykładów ................................................................... 579
Skorowidz ..................................................................................... 581
Rozdział 8.
Bezpieczeństwo
Zapewnienie odpowiedniego poziomu bezpieczeństwa jest jednym z fundamentalnych
zadań aplikacji korporacyjnych. Musimy być w stanie precyzyjnie określić, kto może
mieć dostęp do aplikacji i w jakim zakresie może z oferowanych przez system opera-
cji korzystać. Specyfikacja J2EE definiuje prosty, korzystający z pojęcia roli model
bezpieczeństwa dla komponentów sieciowych i EJB. Bezpieczeństwem serwera JBoss
zajmuje się podsystem o nazwie JBossSX. Obsługuje on zarówno bazujący na rolach
deklaratywny model bezpieczeństwa, jak i pozwala na integrację za pomocą pośred-
nika ze specjalizowanym modułem bezpieczeństwa. Domyślna implementacja deklara-
tywnego modelu bezpieczeństwa korzysta z technologii JAAS (ang. Java Authentication
and Authorization Service). Warstwa pośrednika bezpieczeństwa pozwala na podłącze-
nie dowolnego, specjalizowanego modułu obsługi kwestii bezpieczeństwa, którego nie
jesteśmy w stanie zdefiniować za pomocą modelu deklaratywnego. Odbywa się to
w sposób przezroczysty z punktu widzenia komponentów biznesowych. Zanim przej-
dziemy do szczegółów implementacyjnych serwera JBoss, przypomnimy opisane w spe-
cyfikacji modele bezpieczeństwa dotyczące serwletów i komponentów EJB oraz pod-
stawy technologii JAAS.
Deklaratywny model obsługi
bezpieczeństwa J2EE
Specyfikacja J2EE zaleca stosowanie deklaratywnego modelu obsługi bezpieczeństwa.
Nosi on nazwę deklaratywnego, ponieważ odpowiednie role i uprawnienia definiujemy
za pomocą standardowego deskryptora XML, informacji tych nie wstawiamy natomiast
do wnętrza komponentów biznesowych. W ten sposób izolujemy kwestie bezpieczeń-
stwa od kodu warstwy logiki biznesowej. Mechanizmy zapewniające bezpieczeństwo
powinny być funkcją kontenera, w którym komponent jest wdrożony, nie zaś częścią
samego komponentu. Wyobraźmy sobie komponent, który reprezentuje i zapewnia
dostęp do konta bankowego. Sprawy związane z zapewnieniem bezpieczeństwa, ro-
lami, prawami dostępu są zupełnie niezależne od logiki, jaką obiekt posiada. Zależą one
przede wszystkim od specyfiki miejsca, w którym komponent jest wdrożony.
324
JBoss 4.0. Podręcznik administratora
Zabezpieczenie aplikacji J2EE zależy od konfiguracji wymagań, a ta znajduje się
w standardowych deskryptorach wdrożenia. Za dostęp do komponentów EJB odpowia-
da plik deskryptora ejb-jar.xml. W przypadku komponentów warstwy sieciowej jest to
deskryptor web.xml. W poniższych punktach omówimy znaczenie i sposób użycia pod-
stawowych elementów konfigurujących sposób zabezpieczenia aplikacji.
Referencje — element security-role-ref
Zarówno komponentom EJB, jak też serwletom możemy przypisać jeden lub wiele ele-
mentów security-role-ref (rysunek 8.1). Stosując ten element, deklarujemy, że kom-
ponent korzysta z wartości role-name, traktując ją jako argument wywołania metody
isCallerInRole(String). Za pomocą metody isCallerInRole komponent może spraw-
dzić, czy obiekt wywołujący występuje w roli, która została zadeklarowana przez ele-
ment security-role-ref/role-name. Wartość elementu role-name musi być związana
z elementem security-role za pośrednictwem elementu role-link. Typowe wykorzy-
stanie metody isCallerInRole polega na dokonaniu operacji weryfikacji, której nie da
się przeprowadzić przy użyciu standardowych, związanych z rolą elementów method-
-permissions.
Rysunek 8.1.
Struktura elementu
security-role-ref
Na listingu 8.1 prezentujemy sposób użycia elementu security-role-ref w pliku de-
skryptora ejb-jar.xml.
Listing 8.1. Fragment deskryptora ejb-jar.xml ilustrujący sposób użycia elementu security-role-ref
!-- Przykładowy fragment deskryptora ejb-jar.xml --
ejb-jar
enterprise-beans
session
ejb-name ASessionBean /ejb-name
...
security-role-ref
role-name TheRoleICheck /role-name
role-link TheApplicationRole /role-link
/security-role-ref
/session
/enterprise-beans
...
/ejb-jar
Rozdział 8. ♦ Bezpieczeństwo
325
Sposób wykorzystania elementu security-role-ref w pliku web.xml demonstruje li-
sting 8.2
Listing 8.2. Fragment deskryptora web.xml ilustrujący sposób użycia elementu security-role-ref
web-app
servlet
servlet-name AServlet /servlet-name
...
security-role-ref
role-name TheServletRole /role-name
role-link TheApplicationRole /role-link
/security-role-ref
/servlet
...
/web-app
Tożsamość — element security-identity
Za pomocą elementu security-identity istnieje możliwość określenia tożsamości, któ-
rą posługuje się komponent EJB w chwilach, w których wywołuje metody innych kom-
ponentów. Strukturę elementu security-identity pokazuje rysunek 8.2.
Rysunek 8.2.
Struktura elementu
security-identity
Tożsamość komponentu wywołującego metodę może być taka sama jak aktualna toż-
samość klienta, który z tego komponentu korzysta. Możemy jednak posłużyć się inną
rolą. Osoba konstruująca aplikację używa elementu security-identity wraz z elemen-
tem podrzędnym use-caller-identity, chcąc wskazać, że aktualna tożsamość kom-
ponentu EJB ma być propagowana w ramach wywołań metod innych komponentów.
Opcja ta jest domyślna i zostanie zastosowana także w sytuacjach, w których element
security-identity nie będzie w ogóle zdefiniowany.
Rozwiązanie alternatywne polega na użyciu elementu run-as/role-name. Określamy
w ten sposób inną rolę, wskazaną właśnie przez wartość elementu role-name, która
będzie odpowiadała tożsamości wysyłanej podczas wywoływania metod innych kom-
ponentów EJB. Zauważ, że nie zmieniamy w ten sposób tożsamości obiektu wywo-
łującego, co pokazuje metoda EJBContext.getCallerPrincipal. Oznacza to natomiast,
że rolom obiektu wywołującego przypisywana jest pojedyncza rola określona przez
326
JBoss 4.0. Podręcznik administratora
wartość elementu run-as/role-name. Jednym z zastosowań elementu run-as jest unie-
możliwienie zewnętrznym klientom dostępu do komponentów EJB, z których chcemy
korzystać wyłącznie wewnątrz aplikacji. Osiągamy to na zasadzie przypisania elemen-
tom method-permission komponentu EJB takich ról, mających zezwolenie na wywo-
łanie metody, które nigdy nie zostaną przydzielone klientom zewnętrznym. Następnie
komponentom EJB, które upoważnimy do wywoływania metod komponentów we-
wnętrznych, przypisujemy tę rolę za pomocą elementu run-as/role-name. Listing 8.3
zawiera fragment deskryptora ejb-jar.xml, w którym użyty został element security-
-identity.
Listing 8.3. Fragment deskryptora ejb-jar.xml, który jest przykładem wykorzystania elementu
security-identity
!-- Przykładowy fragment deskryptora ejb-jar.xml --
ejb-jar
enterprise-beans
session
ejb-name ASessionBean /ejb-name
!-- ... --
security-identity
use-caller-identity/
/security-identity
/session
session
ejb-name RunAsBean /ejb-name
!-- ... --
security-identity
run-as
description A private internal role /description
role-name InternalRole /role-name
/run-as
/security-identity
/session
/enterprise-beans
!-- ... --
/ejb-jar
Role — element security-role
Nazwa roli, do której odwołujemy się z poziomu elementów security-role-ref lub
security-identity musi odpowiadać którejś z ról zdefiniowanych na poziomie apli-
kacji. Osoba wdrażająca aplikację tworzy takie role logiczne za pomocą elementów
security-role (rysunek 8.3). Wartość elementu role-name jest nazwą roli logicznej
zdefiniowanej w ramach aplikacji. Przykładem może być rola Administrator, Architekt
czy Sprzedawca.
W specyfikacji J2EE wyraźnie podkreśla się, by nie zapominać o tym, że role wymie-
nione w deskryptorze wdrożenia tworzą pewien logiczny widok aplikacji, który odpo-
wiada przyjętej strategii zapewnienia jej bezpieczeństwa. Role zdefiniowane na pozio-
mie deskryptora nie powinny być mylone z grupami, użytkownikami i uprawnieniami
istniejącymi na poziomie systemu operacyjnego, w ramach którego pracuje serwer
Rozdział 8. ♦ Bezpieczeństwo
327
Rysunek 8.3.
Struktura elementu
security-role
aplikacyjny. Role z deskryptora wdrożenia to składniki aplikacji, taki jest też ich za-
sięg. W przypadku aplikacji bankowej rolami takimi może być np. KierownikZmiany,
Kasjer czy Klient.
W serwerze JBoss elementy security-role używane są jedynie w celu przyporząd-
kowania wartości security-role/role-name do roli logicznej, do której odwołuje się
komponent. Role przypisywane użytkownikowi są dynamiczną funkcją menedżera bez-
pieczeństwa aplikacji, co pokażemy podczas omawiania szczegółów implementacyjnych
podsystemu JBossSX. JBoss nie wymaga definicji elementów security-role w celu
określenia uprawnień zezwalających na wywoływanie metod. Jednakże tworzenie ele-
mentów security-role jest ciągle zalecaną praktyką, gwarantującą przenośność apli-
kacji pomiędzy różnymi serwerami aplikacyjnymi. Na listingu 8.4 widzimy element
security-role użyty wewnątrz deskryptora ejb-jar.xml.
Listing 8.4. Fragment deskryptora ejb-jar.xml, który jest przykładem wykorzystania elementu
security-role
!-- Przykładowy fragment deskryptora ejb-jar.xml --
ejb-jar
!-- ... --
assembly-descriptor
security-role
description The single application role /description
role-name TheApplicationRole /role-name
/security-role
/assembly-descriptor
/ejb-jar
Na listingu 8.5 widzimy element security-role użyty w deskryptorze web.xml.
Listing 8.5. Fragment deskryptora web.xml, który jest przykładem wykorzystania elementu security-role
!-- Przykładowy fragment deskryptora web.xml --
web-app
!-- ... --
security-role
description The single application role /description
role-name TheApplicationRole /role-name
/security-role
/web-app
328
JBoss 4.0. Podręcznik administratora
Uprawnienia wywoływania metod
Osoba wdrażająca aplikację może za pomocą elementów method-permission wskazać
role, które uprawnione są do wywoływania metod zawartych w domowych i zdalnych
interfejsach komponentów EJB. Strukturę elementu method-permission widzimy na
rysunku 8.4.
Rysunek 8.4.
Struktura elementu
method-permission
Każdy element method-permission posiada jeden lub wiele elementów zagnieżdżonych
role-name wskazujących na role posiadające uprawnienia, które pozwalają wywołać zde-
finiowane za pomocą elementów zagnieżdżonych method metody komponentu EJB (ry-
sunek 8.5). Zamiast elementu role-name możemy zdefiniować element unchecked, de-
klarując w ten sposób, że dostęp do metod określonych za pomocą elementów method
mają wszyscy klienci, którzy zostali przez aplikację uwierzytelnieni. Istnieje także ele-
ment exclude-list definiujący metody, których nie można wywołać. Metody kompo-
nentu EJB, które nie zostały wymienione na liście metod dostępnych, traktowane są do-
myślnie w taki sam sposób, jakby były wykluczone za pomocą elementu exclude-list.
Rysunek 8.5.
Struktura
elementu method
Rozdział 8. ♦ Bezpieczeństwo
329
Istnieją trzy dopuszczalne sposoby deklaracji elementu method:
(cid:141) Sposób pierwszy stosujemy wówczas, gdy chcemy wskazać wszystkie
metody interfejsu domowego i zdalnego danego komponentu EJB:
method
ejb-name EJBNAME /ejb-name
method-name * /method-name
/method
(cid:141) Sposób drugi stosujemy, gdy chcemy wskazać metodę o podanej nazwie
wchodzącą w skład interfejsu domowego lub zdalnego danego komponentu EJB:
method
ejb-name EJBNAME /ejb-name
method-name METHOD /method-name
/method
Jeśli istnieje kilka przeciążonych metod o tej samej nazwie, to element dotyczy
wszystkich.
(cid:141) Trzeci sposób jest najbardziej dokładny. Pozwala wskazać konkretną
metodę nawet wówczas, gdy jej nazwa jest przeciążona.
method
ejb-name EJBNAME /ejb-name
method-name METHOD /method-name
method-params
method-param PARAMETER_1 /method-param
!-- ... --
method-param PARAMETER_N /method-param
/method-params
/method
Wskazana metoda musi być składnikiem interfejsu domowego lub zdalnego
danego komponentu. Każdy element method-param posiada wartość, którą jest
pełna nazwa typu kolejnego parametru metody.
Opcjonalny element method-intf pozwala nam na dokonanie rozróżnienia w przypad-
kach, gdy metody o identycznej sygnaturze wchodzą w skład zarówno interfejsu do-
mowego, jak i zdalnego.
Poniżej, na listingu 8.6, prezentujemy przykład użycia elementu method-permission.
Listing 8.6. Fragment deskryptora ejb-jar.xml, który jest ilustracją użycia elementu method-permission
ejb-jar
assembly-descriptor
method-permission
description Role employee oraz temp-employee pozwalają na dostęp
do metod komponentu EmployeeService /description
role-name employee /role-name
role-name temp-employee /role-name
method
ejb-name EmployeeService /ejb-name
method-name * /method-name
/method
330
JBoss 4.0. Podręcznik administratora
/method-permission
method-permission
description Rola employee zezwala na wywołanie metod findByPrimaryKey,
getEmployeeInfo oraz updateEmployeeInfo(String) komponentu /description
role-name employee /role-name
method
ejb-name AardvarkPayroll /ejb-name
method-name findByPrimaryKey /method-name
/method
method
ejb-name AardvarkPayroll /ejb-name
method-name getEmployeeInfo /method-name
/method
method
ejb-name AardvarkPayroll /ejb-name
method-name updateEmployeeInfo /method-name
method-params
method-param java.lang.String /method-param
/method-params
/method
/method-permission
method-permission
description Rola admin pozwala na wywołanie dowolnej metody komponentu
EmployeeServiceAdmin /description
role-name admin /role-name
method
ejb-name EmployeeServiceAdmin /ejb-name
method-name * /method-name
/method
/method-permission
method-permission
description Każdy uwierzytelniony użytkownik posiada prawo wywoływania
dowolnej metody komponentu EmployeeServiceHelp
/description
unchecked/
method
ejb-name EmployeeServiceHelp /ejb-name
method-name * /method-name
/method
/method-permission
exclude-list
description Wdrożenie nie zezwala na wywołanie żadnej z metod fireTheCTO
komponentu EmployeeFiring
/description
method
ejb-name EmployeeFiring /ejb-name
method-name fireTheCTO /method-name
/method
/exclude-list
/assembly-descriptor
/ejb-jar
Rozdział 8. ♦ Bezpieczeństwo
331
Uprawnienia dotyczące aplikacji sieciowych
W aplikacjach sieciowych zasady bezpieczeństwa i dostępu do zasobów również okre-
ślane są przy użyciu ról. W tym przypadku jednak prawa dostępu do zasobów przypi-
sujemy rolom, korzystając z wzorców URL-i. Wskazują one te treści, do których nie
można się swobodnie odwoływać. Całość definiujemy w pliku deskryptora web.xml
za pomocą elementu security-constraint (rysunek 8.6).
Rysunek 8.6.
Struktura elementu
security-constraint
Treść, która ma być chroniona, deklarujemy za pomocą jednego lub wielu elementów
web-resource-collection. Każdy taki element zawierać może listę elementów podrzęd-
nych url-pattern oraz listę elementów http-method. Wartość elementu url-pattern
zawiera wzorzec URL. Dostępne będą tylko te zasoby wskazane w żądaniu, które od-
powiadają wzorcowi. Wartość elementu http-method wskazuje natomiast, jakie rodzaje
żądań HTTP będą obsługiwane.
332
JBoss 4.0. Podręcznik administratora
Opcjonalny element user-data-constraint określa wymagania, jakie stawiamy war-
stwie transportowej nadzorującej połączenie pomiędzy klientem a serwerem. Możemy
wybrać wariant gwarantujący integralność przesyłanych danych (chroniący dane przed
ich modyfikacją w czasie transmisji) bądź poufność danych (osoby trzecie nie będą
w stanie odczytać przesyłanych danych). Elementu transport-guarantee określa spo-
sób ochrony danych w czasie komunikacji na linii klient-serwer. Możemy wybrać jedną
z trzech wartości tego elementu: NONE, INTEGRAL lub CONFIDENTIAL. Wybór pierwszej
opcji, NONE, oznacza, że aplikacja nie wymaga żadnej ochrony przesyłanych danych.
Opcję INTEGRAL stosujemy wówczas, gdy chcemy, by dane pomiędzy serwerem a klien-
tem nie mogły być podczas transportu zmodyfikowane. Wartość CONFIDENTIAL zapewni
z kolei, że transmitowane dane są chronione przed ewentualną obserwacją prowadzo-
ną przez osoby trzecie. W większości przypadków wybór opcji INTEGRAL bądź CONFI-
DENTIAL wiąże się z koniecznością włączenia obsługi bezpiecznego protokołu SSL.
Opcjonalny element login-config służy do definicji metody uwierzytelnienia, dziedzi-
ny, która ma być związana z aplikacją, oraz dodatkowych atrybutów, które są wymaga-
ne w czasie uwierzytelnienia z użyciem formularza. Model zawartości tego elementu
został przedstawiony na rysunku 8.7.
Rysunek 8.7.
Element login-config
Element podrzędny auth-method określa mechanizm uwierzytelniania klientów apli-
kacji sieciowej. Uzyskanie dostępu do dowolnego zasobu sieciowego, który jest chro-
niony, musi być poprzedzone zakończoną powodzeniem operacją uwierzytelnienia. Ist-
nieją cztery dopuszczalne wartości elementu auth-metod: BASIC, DIGEST, FORM i CLIENT-
-CERT. Element podrzędny realm-name określa nazwę dziedziny używanej podczas sto-
sowania metod BASIC (podstawowa metoda uwierzytelniania) oraz DIGEST (odmiana me-
tody podstawowej z zastosowaniem funkcji jednokierunkowej). Element podrzędny
form-login-config wskazuje stronę logowania i stronę błędu, które użyte zostaną w cza-
sie użycia metody uwierzytelniania bazującej na formularzu. Jeśli natomiast wartość
elementu auth-method jest inna niż FORM, to cały węzeł form-login-config jest igno-
rowany. Na listingu 8.7 prezentujemy fragment deskryptora web.xml, w którym ustala-
my, że wszystkie zasoby znajdujące się w katalogu /restricted wymagają, by użytkownik,
Rozdział 8. ♦ Bezpieczeństwo
333
który chce się do nich odwoływać, miał przypisaną rolę AuthorizedUser. Nie ma na-
tomiast żadnych wymagań odnośnie warstwy transportowej, a uwierzytelnienie doko-
nywane jest przy użyciu metody podstawowej.
Listing 8.7. Fragment deskryptora web.xml, który jest ilustracją użycia elementu security-constraint
web-app
!-- ... --
security-constraint
web-resource-collection
web-resource-name Secure Content /web-resource-name
url-pattern /restricted/* /url-pattern
/web-resource-collection
auth-constraint
role-name AuthorizedUser /role-name
/auth-constraint
user-data-constraint
transport-guarantee NONE /transport-guarantee
/user-data-constraint
/security-constraint
!-- ... --
login-config
auth-method BASIC /auth-method
realm-name The Restricted Zone /realm-name
/login-config
!-- ... --
security-role
description Rola wymagana w celu uzyskania dostępu do zabezpieczonej treści
/description
role-name AuthorizedUser /role-name
/security-role
/web-app
Obsługa bezpieczeństwa deklaratywnego
w serwerze JBoss
Przedstawione dotychczas elementy opisują kwestie bezpieczeństwa jedynie z per-
spektywy aplikacji. Ich wartości definiują pewne logiczne role, które osoba zajmująca
się wdrożeniem musi przenieść do środowiska, w którym aplikacja ma funkcjonować.
Specyfikacja J2EE nie omawia tych zagadnień szczegółowo, wychodząc z założenia,
że szczegóły zależą już od implementacji samego serwera aplikacyjnego. W JBossie
związanie logicznych ról ze środowiskiem serwera wiąże się ze wskazaniem menedżera
bezpieczeństwa, który jest zgodny z modelem bezpieczeństwa J2EE. Odbywa się to
za pomocą specjalnego deskryptora wdrożenia. Więcej szczegółów na temat konfigu-
rowania warstwy bezpieczeństwa omawiamy w podrozdziale „Model bezpieczeństwa
serwera JBoss”.
334
JBoss 4.0. Podręcznik administratora
Wprowadzenie do JAAS
Podsystem JBossSX bazuje na API JAAS (ang. Java Authentication and Aauthorization
Service). Zrozumienie działania implementacji JBossSX wymaga znajomości podstaw
JAAS API. Dlatego zaczniemy od krótkiego wykładu na temat JAAS, który stanowi
przygotowanie do dalszej dyskusji na temat JBossSX.
Czym jest JAAS?
JAAS API 1.0 to zestaw pakietów i klas, które zaprojektowano z myślą o operacjach
uwierzytelniania i autoryzacji. Stanowią one napisaną w języku Java implementację
standardowego, wymiennego modułu uwierzytelniającego PAM (ang. Pluggable Au-
thentication Module). Rozwiązanie to jest zgodne i rozszerza standardową architekturę
bezpieczeństwa oraz zawarte tam mechanizmy uwierzytelniania użytkowników. Mo-
duł JAAS był początkowo dostarczany w postaci rozszerzenia dla JDK 1.3. Począwszy
od wersji 1.4, jest już standardowym składnikiem JDK. A ponieważ JBossSX używa
wyłącznie tych funkcji JAAS, które wiążą się z uwierzytelnianiem, to od tej chwili kon-
centrować się będziemy jedynie na zagadnieniach z tym związanych.
Uwierzytelnianie w JAAS odbywa się na zasadzie dołączenia odpowiedniego modułu.
Pozwala to aplikacjom Javy pozostawać niezależnymi od aktualnie stosowanej techno-
logii i mechanizmów uwierzytelniania. Dzięki temu JBossSX może pracować w oparciu
o różne infrastruktury bezpieczeństwa. Integracja z określoną infrastrukturą bezpie-
czeństwa może odbywać się bez konieczności dokonywania zmian w implementacji
menedżera bezpieczeństwa JBossSX. Jedynym elementem, który wymaga modyfikacji,
jest konfiguracja stosu uwierzytelniania używanego przez JAAS.
Podstawowe klasy JAAS
Podstawowe klasy wchodzące w skład JAAS dzielą się na trzy kategorie: klasy ogólne,
klasy odpowiadające za uwierzytelnianie i klasy odpowiadające za autoryzację. Poniżej
prezentujemy jedynie klasy kategorii pierwszej i drugiej. To one implementują funk-
cjonalność modułu JBossSX, którą opisujemy w rozdziale.
Klasy ogólne:
(cid:141) Subject (javax.security.auth.Subject)
(cid:141) Principal (java.security.Principal)
Klasy związane z uwierzytelnianiem:
(cid:141) Callback (javax.security.auth.callback.Callback)
(cid:141) CallbackHandler (javax.security.auth.callback.CallbackHandler)
(cid:141) Configuration (javax.security.auth.login.Configuration)
(cid:141) LoginContext (javax.security.auth.login.LoginContext)
(cid:141) LoginModule (javax.security.auth.spi.LoginModule)
Rozdział 8. ♦ Bezpieczeństwo
335
Klasy Subject i Principal
Zanim nastąpi autoryzacja, zezwalająca na dostęp do zasobów, aplikacja musi najpierw
uwierzytelnić źródło, z którego pochodzi żądanie. W JAAS zdefiniowane zostało po-
jęcie podmiotu (ang. subject), który reprezentuje źródło żądania. Odpowiadająca mu
klasa Subject jest kluczowym elementem JAAS. Obiekt Subject zawiera informacje
o pojedynczej encji, którą może być osoba lub usługa. Informacje te obejmują tożsa-
mość encji, a także jej publiczne i prywatne dane uwierzytelniające. JAAS API używa
istniejącego już w Javie interfejsu java.security.Principal, który służy do reprezen-
towania tożsamości. Obiekt tego typu przechowuje po prostu nazwę.
W trakcie procesu uwierzytelnienia podmiotowi przypisuje się tożsamość (klasa Princi-
pal) lub tożsamości, ponieważ może on mieć ich kilka. Na przykład jedna osoba może
posiadać obiekt Principal odpowiadający jej nazwisku (np. Jan Kowalski), numerowi
identyfikacyjnemu (71061421421) czy też nazwie użytkownika, jaką osoba się posłu-
guje (jank). Wszystkie te dane pozwalają nam skutecznie odróżniać od siebie poszcze-
gólne obiekty typu Subject. Istnieją dwie metody, które zwracają obiekty typu Principal
związane z obiektem Subject:
public Set getPrincipals() {...}
public Set getPrincipals(Class c) {...}
Pierwsza z nich zwraca wszystkie tożsamości podmiotu. Metoda druga zwraca nato-
miast tylko te obiekty Principal, które są instancjami typu c lub po c dziedziczą. Gdy
obiektów takich nie ma, zwracany jest zbiór (Set) pusty. Zwróć uwagę, że interfejs
java.security.acl.Group jest rozszerzeniem interfejsu java.security.Principal. Dzięki
temu, stosując odpowiednie typy, możemy logicznie grupować obiekty reprezentujące
tożsamość.
Uwierzytelnienie podmiotu
Uwierzytelnienie podmiotu wiąże się z operacją logowania do JAAS. Procedura logo-
wania składa się z następujących etapów:
1. Aplikacja tworzy instancję typu LoginContext, przekazując nazwę konfiguracji
logowania oraz obiekt implementujący interfejs CallbackHandler, któremu
zostanie przekazana tablica obiektów typu Callback, ich zestaw odpowiada
konfiguracji modułu LoginModule.
2. Obiekt LoginContext na podstawie obiektu Configuration ustala listę
wszystkich modułów LoginModule, które zgodnie z konfiguracją należy
załadować. Przy braku wskazanej konfiguracji domyślnie użyta zostanie
konfiguracja o nazwie other.
3. Aplikacja wywołuje metodę LoginContext.login.
4. Metoda login odwołuje się kolejno do wszystkich załadowanych modułów
typu LoginModule. Każdy z nich dokonuje próby uwierzytelnienia podmiotu,
wywołując metodę handle odpowiedniego obiektu CallbackHandler, która
zwraca informacje wymagane w procesie uwierzytelnienia. Parametrem
metody handle jest tablica obiektów typu Callback. Jeśli operacja zakończy
się sukcesem, LoginModule przypisują podmiotowi odpowiednią tożsamość
i dane uwierzytelniające.
336
JBoss 4.0. Podręcznik administratora
5. Obiekt LoginContext zwraca aplikacji status operacji uwierzytelnienia.
Sukcesowi odpowiada prawidłowe zakończenie metody login. Nieudane
logowanie sygnalizowane jest
Pobierz darmowy fragment (pdf)