2011-07-18 14 views
17

Pracuję z modułem glassfish i jaas.Glassfish 3.1 domyślna rola do mapowania

Skonfigurowałem mój web.xml w ten sposób.

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>ALL Page for admin</web-resource-name> 
     <url-pattern>/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>user</role-name> 
    </auth-constraint> 
</security-constraint> 
<login-config> 
    <auth-method>BASIC</auth-method> 
    <realm-name>file</realm-name> 
</login-config> 
<security-role> 
    <description>Administrator</description> 
    <role-name>user</role-name> 
</security-role> 

Oznacza to, że wszyscy użytkownicy, którzy chcą uzyskać dostęp do mojej aplikacji internetowej, muszą być użytkownikami grupy.

Następnie w konsoli GlassFish muszę zaznaczyć opcje w: Konfiguracja -> Serwer-config -> Zabezpieczenia -> Default Principal Role Mapping

Moje pytanie brzmi: dlaczego muszę zaznaczyć to domyślne zleceniodawcy Odwzorowanie ról? I jak mogę zmienić mój web.xml, aby go nie zaznaczyć?

Thanks a lot

Loic

Odpowiedz

37

Po określeniu zadań i ról w web.xml używasz deklaratywny bezpieczeństwa, które w istocie opiera się na wykorzystaniu JAAS egzekwowania wymogów uwierzytelniania i autoryzacji określonych deklaratywnie.

Role określone w deskryptorach wdrażania są po prostu reprezentacjami ról używanych w aplikacji. Role te nie muszą być takie same jak te obecne w bazie danych tożsamości użytkownika (lub sferze uwierzytelniania) używanej w środowisku wykonawczym, a zazwyczaj mogą się one różnić, ponieważ rozwój aplikacji mógł zostać wykonany bez względu na faktycznych użytkowników i grupy obecne w bazie danych tożsamości użytkownika.

Zazwyczaj wykonywane jest odwzorowanie między deklaratywnymi rolami określonymi w web.xml a głównymi lub grupami obecnymi w bazie danych tożsamości użytkownika przy użyciu specyficznych dla kontenera deskryptorów wdrażania. W Glassfish 3,1 jest to plik glassfish-web.xml. Każde takie odwzorowanie zamieniłoby deklaratywną rolę w aplikacji na element główny lub grupę w obszarze JAAS, w następujący sposób: glassfish-web.xml (dla wdrożeń plików WAR) lub glassfish-application.xml (dla wdrożeń plików EAR) lub glassfish-ejb-jar.xml (dla wdrożenia EJB pliku JAR):

GlassFish-web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> 
<glassfish-web-app error-url=""> 
... 
    <security-role-mapping> 
     <role-name>user</role-name> 
     <principal-name>Root</principal-name> <!-- Map a principal to the role 'user' --> 
     <group-name>Administrators</group-name> <!-- Map a group to the role 'user' --> 
    </security-role-mapping> 
... 
</glassfish-web-app> 

GlassFish-application.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE glassfish-application PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Java EE Application 6.0//EN" "http://glassfish.org/dtds/glassfish-application_6_0-1.dtd"> 
<glassfish-application> 
... 
    <security-role-mapping> 
     <role-name>user</role-name> 
     <principal-name>Root</principal-name> <!-- Map a principal to the role 'user' --> 
     <group-name>Administrators</group-name> <!-- Map a group to the role 'user' --> 
    </security-role-mapping> 
... 
</glassfish-application> 

GlassFish-EJB-jar.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE glassfish-ejb-jar PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 EJB 3.1//EN" "http://glassfish.org/dtds/glassfish-ejb-jar_3_1-1.dtd"> 
<glassfish-ejb-jar> 
... 
    <security-role-mapping> 
     <role-name>user</role-name> 
     <principal-name>Root</principal-name> <!-- Map a principal to the role 'user' --> 
     <group-name>Administrators</group-name> <!-- Map a group to the role 'user' --> 
    </security-role-mapping> 
... 
</glassfish-ejb-jar> 

Powyższe deskryptory map rolę user do Zamawiającego z indywidualnej tożsamości nazwy Root i do grupy użytkowników z nazwą Administrators w królestwie. Można pominąć jedno z tych mapowań i zachować tylko rolę w mapowaniu głównym lub rolę w odwzorowaniu grupy. Możesz także mieć wielu zleceniodawców zmapowanych do tej samej roli lub wiele grup odwzorowanych na tę samą rolę, a nawet wielu zleceniodawców i grup zamapowanych do tej samej roli.

Ważne jest zrozumienie pojęcia zleceniodawców i grup w sferach JAAS - zleceniodawca reprezentuje tożsamość Podmiotu (użytkownika logującego się do aplikacji) w systemie i może to być indywidualna tożsamość (pojedynczy użytkownik) lub tożsamość grupową (grupa użytkowników). Przez odwzorowanie deklaratywnych ról na rzeczywiste elementy główne lub grupy, można wymusić reguły określone w web.xml względem dowolnej bazy danych tożsamości użytkownika (tj. Dowolnej dziedziny) i być w stanie zrobić to dynamicznie bez żadnych zmian w bazie kodu; w końcu taka zmiana wymagałaby odwzorowania deklaratywnych ról na nowy zestaw zasad i grup w potencjalnie innej dziedzinie. Możesz znaleźć podstawowy samouczek na temat bezpieczeństwa Java EE i JAAS w the chapter on security in the Java EE 6 tutorial.

Glassfish pozwala na uproszczenie schematu mapowania, w którym nie jest konieczne wykonanie mapowania dla wszystkich deklaratywnych ról w deskryptorze wdrażania specyficznym dla kontenera (w tym przypadku glassfish-web.xml), o ile nazwy deklaratywne role są podobne do nazw podmiotów lub grup. Jest to domyślna zasada schematu mapowania ról. Wygląda na to, że w twoim przypadku zleceniodawcy/grupy w twoim królestwie są takie same, jak deklaratywne role określone w web.xml, a zatem możesz uniknąć jawnego mapowania ról do zleceń i grup. W prostszych słowach, jeśli rola user jest taka sama jak główna nazwa domeny JAAS (i ​​podobnie dla innych tożsamości), to możesz użyć domyślnej roli głównego schematu mapowania Glassfish, bez mapowania tego dla każdego rola w pliku web.xml.

Jeśli chcesz uniknąć zaznaczania opcji instalacji domyślnego zlecenia dla mapowania ról, musisz podać rolę mapowania głównego/grupy siebie w deskryptorach wdrażania specyficznych dla kontenera, tak jak robisz to zwykle na innych serwerach aplikacji.

Więcej informacji na ten temat można uzyskać pod adresem one of the posts on blogs.oracle.com that describes this feature of Glassfish.

+0

Dzięki za odpowiedź. Właściwie to, co chcę zrobić, to mieć jedną grupę nazywaną użytkownikiem. I wszyscy użytkownicy są częścią tej grupy. Oznacza to, że każdy, kto ma konto z mojej aplikacji (to wojna) może połączyć się za pomocą hasła i użytkownika. Potem po tym, jak zarządzam sam, kto może uzyskać dostęp do tego, co w aplikacji. – user789148

+0

Jeśli skorzystam z kodu, który podasz mi dla glassfish-web.xml. Otrzymuję następujący błąd podczas próby połączenia z moją aplikacją. Dostęp do wskazanego zasobu (dostęp do żądanego zasobu został odrzucony) został zabroniony. Nie daje mi nawet ekranu logowania. – user789148

+0

Przepraszam. Ok, rozumiem to teraz. Po prostu muszę dodać mapowanie od moich użytkowników i działa :) Wielkie rzeczy, które kojarzysz – user789148