2010-02-09 22 views
11

Chcę zarządzać użytkownikami i rolami w dedykowanej aplikacji. Na przykład użytkownik tej aplikacji ("boss klienta") może utworzyć nową rolę "pracownik customerX". Jeśli pracownik uzyskuje dostęp do serwera aplikacji Java EE (GlassFish 3), powinien uzyskać rolę "pracownika customerX".dynamiczne role na serwerze Java EE

To brzmi prosto, ale nie jest obsługiwane przez Java EE, ponieważ grupy są mapowane na role w czasie uruchamiania, a role w aplikacji są statyczne.

Jaki jest najlepszy sposób zarządzania rolami użytkowników w środowisku wykonawczym w środowisku Java EE (6)?

+2

Stworzyłem https://java.net/jira/browse/JAVAEE_SPEC-20 w celu wsparcia (między innymi) tego przypadku użycia. Jeśli Ty lub ktokolwiek jeszcze jest zaniepokojony brakiem dynamizmu w rolach Java EE, zagłosuj na niego lub zostaw komentarz. –

Odpowiedz

11

Deklaratywne zabezpieczenia w Java EE rzeczywiście nie są odpowiednie dla takich wymagań. Problem bezpieczeństwa można podzielić na dwie części:

  • uwierzytelniania
  • upoważnienie

Miałem kiedyś podobny wymóg. Użyliśmy wbudowanego uwierzytelniania, aby zleceniodawca ustalił i polegał na domyślnych mechanizmach logowania Java EE. Ale ostatecznie zarządzaliśmy częścią autoryzacji ręcznie na poziomie aplikacji.

Rzeczywiście, nawet ról, które będą ładowane i związane z głównym (isUserInRole do sieci lub isCallerInRole do EJB) muszą być określone w web.xml lub ejb.xml, który nie zapewnia wystarczającej elastyczności. Musieliśmy następnie załadować role ręcznie (według zleceniodawcy) z LDAP lub ActiveDirectory. Następnie wykorzystaliśmy filtry przechwytujące EJB3 i filtr serwletu, aby sami przeprowadzać kontrole bezpieczeństwa.

Chciałbym jednak zdecydowanie zasugerować trzymanie się kontroli dostępu opartej na rolach (RBAC) i nie wdrażać czegoś bardziej wymyślnego. Istnieje kilka frameworków, które mogą pomóc w radzeniu sobie z RBAC wytworzonymi w domu.

Mieliśmy również spojrzeć na JSecurity i Acegi Security i wydawały się interesujące.

+0

Dziękuję za odpowiedź, zwłaszcza za podpowiedź, że nawet dynamicznie ustawione role muszą być zadeklarowane statycznie w web.xml lub ejb.xml! To byłaby dla mnie kolejna pułapka. Sprawdzę JSecurity i Spring Security (następcę Acegi) http://static.springsource.org/spring-security/site/index.html. – deamon

+1

JSecurity nazywa się teraz "Shiro". http://cwiki.apache.org/confluence/display/SHIRO/Index – deamon

+0

Tak, role zadeklarowane za pomocą '' lub '@ DeclaredRoles' są w rzeczywistości symbolicznymi nazwami, które powinny być mapowane do roli w zewnętrznym katalogu (np. LDAP) za pomocą ''. Jeśli odwzorowanie ma wartość od 1 do 1, Glassfish ma opcję "domyślnego przypisania do odwzorowania ról", ale jest to tylko połowa rozwiązania i nadal musisz tam gdzieś umieścić listę. – ewernli

Powiązane problemy