Wiedziałem, że i to działa, ale muszę odzyskać podlegają również uzyskać roleprincipal
Niestety, to nie działa w ten sposób w Java EE. Przedmiot JAAS jest po prostu "workiem zleceniodawców", a który z nich reprezentuje użytkownika/dzwoniącego zleceniodawcę i/lub główny podmiot (role) po prostu nie jest znormalizowany. Każdy inny pojemnik robi tutaj różne rzeczy. Javadoc for Tomcat's JAASRealm ten opisuje i wyjaśnia Tomcat specyficzną konwencję (kopalnia nacisk):
JAA Specyfikacja opisuje wynik udanego logowania jako przykład javax.security.auth.Subject, która może zawierać zero lub więcej java.security.Przykładowe obiekty w wartości zwracanej metody Subject.getPrincipals(). Jednak dostarcza żadnych wskazówek na Jak odróżnić podmiotów, które opisują indywidualnego użytkownika (i są zatem właściwe, aby powrócić jako wartość request.getUserPrincipal() w aplikacji internetowej) ze Zleceniodawcą (ów) że opisać autoryzowane role dla tego użytkownika. Aby zachować jak najwięcej jak to możliwe niezależność od leżącej LoginMethod realizacji zawartej przez JAAS, następujące zasady są realizowane przez ten Realm: [...]
Poza tym, ze środowiska Java EE rzadko nawet mieć dostęp do tematu JAAS, często nawet za pomocą metod określonych przez sprzedawcę. JAAS jest daleki od uniwersalnego standardu, który wydaje się, że tak jest, szczególnie gdy dotyczy Java EE.
Jedyne rzeczy, do których można uzyskać dostęp w sposób przenośny, to osoba dzwoniąca i związane z nią role, ale nawet te nie muszą być dokładnymi osobami dzwoniącymi, które zbudował moduł logowania JAAS.
JBoss AS na przykład kilka razy kopiuje tę instrukcję, używając własnych klas. Jeśli więc moduł JAAS zapisał numer kaz.zak.FooPrincipal
w temacie dla użytkownika/osoby dzwoniącej, wówczas HttpServletRequest#getUserPrincipal()
może zwrócić wartość org.jboss.security.SimplePrincipal
. Gwarantujemy tylko, że getName()
na tej instancji zwróci ten sam ciąg.
jakiegoś tła więcej na ten temat:
Ostatnim źródłem zasadzie mówi to samo, w innym brzmieniu;
Chociaż jest możliwe zastosowanie JAAS ciągu Tomcatem jako uwierzytelnienie mechanizm (JAASRealm), elastyczność ram JAAS traci gdy użytkownik jest uwierzytelniany. Wynika to z tego, że podmioty główne to używane do oznaczania pojęć "użytkownik" i "rola" i nie są już dostępne w kontekście zabezpieczeń, w którym wykonywana jest aplikacja webapp. Wynik uwierzytelnienia jest dostępny tylko za pośrednictwem request.getRemoteUser() i request.isUserInRole().
Spowoduje to zmniejszenie struktury JAAS do celów autoryzacji do prostego użytkownika/systemu roli , który traci połączenie z polityką Java Security .
Bądź pewny, że Twoje królestwo jest używany dla webapp, to można spróbować Servlety API 'HttpServletRequest.getUserPrincipal()' –
i wiedziałem, że to działa, ale muszę odzyskać podlegają również uzyskać roleprincipal – sasaman85