2013-09-10 10 views
10

Obecnie mam aplikację Swing i nie mam zamiaru integrować Apache Shiro w celu uwierzytelnienia i delegowania uprawnień do pewnych ról. Już udało się odczytać użytkowników z pliku shiro.ini że utworzonej do testów, to wygląda mniej więcej tak:Apache Shiro - używanie bazy danych do odczytywania użytkowników, ról i uprawnień

[users] 
admin = 123456, Administrator 

[role] 
Administrator = *:*:* 

Jednak to tylko do testów, teraz muszę przeczytać zezwoleń z bazy danych więc już przechowywane w bazie danych tabelę z informacją muszę i wygląda to mniej więcej tak:

users (id,password,username) 
userRoles (userId, role) 
rolePermission (permissionID,permission,roleID) 

Próbowałam zrozumieć tutoriale, które używają sferę JDBC, jednak oni korzystać z internetu aplikacje lub platformy specjalne do zarządzania połączeniem z bazą danych, takie jak Apache Derby lub BoneCP, i dezorientują mnie jeszcze bardziej przy pomocy przykładów these.

To, o co pytam, to jak skonfigurować plik shiro.ini, jeśli chcę używać sfery JDBC (z bazą danych Oracle) i jakie klasy potrzebuje shiro.ini. Wszelkie przykłady lub wyjaśnienia zostaną docenione!

+0

Przed próbą odpowiedzi, czy wiesz, jak korzystać z JDBC i czy znasz relacyjne bazy danych? –

+0

@BalusC nie THEY, Powiedziałem, że przykłady online, tak, są bardzo proste, gdy tylko używasz pliku .ini do uzyskania ról użytkowników i zezwoleń, ale nie, kiedy chcesz odzyskać te informacje z relacyjnej bazy danych – Nivde

+0

@SotiriosDelimanolis I ' nie jestem ekspertem, ale dla mnie zrozumienie JDBC to interfejs programowania aplikacji, który pozwala na wykonywanie operacji na bazie danych z języka Java – Nivde

Odpowiedz

8

Interfejs Realm jest elementem bezpieczeństwa

, które mogą uzyskać dostęp do bezpieczeństwa aplikacji specyficznych podmioty takie jak użytkowników, ról i uprawnień w celu określenia uwierzytelniania i autoryzacji operacji.

Można go zaimplementować w celu interakcji z dowolnym źródłem znajdowania użytkowników i ich uprawnień. Jeśli chcesz korzystać z bazy danych opartej na języku SQL, możesz to zrobić. Jeśli chcesz wejść w interakcję z plikiem tekstowym, możesz to zrobić. Jeśli chcesz korzystać z usługi sieciowej, możesz to zrobić.

Istnieją dwa przydatne (prawie konieczne) rozszerzenia Realm, które są AuthenticatingRealm i AuthorizingRealm. Zapewniają one odpowiednio interfejs do usług uwierzytelniania i autoryzacji. AuthorizingRealm rozszerza AuthenticatingRealm. Powinieneś przedłużyć AuthorizingRealm, aby zaimplementować własną logikę uwierzytelniania i autoryzacji.

Weźmy przykład: masz bazę danych z tabeli Accounts jako

username | password | role 

stół Permissions jak

permission_id | permission_name 

i stół Account_Permissions

username | permission_id 

Innymi słowy, Account może pełnić jedną rolę, ale wiele uprawnień. Dzięki JDBC możesz bardzo łatwo wyszukiwać takie bazy danych i pobierać nazwy użytkowników, hasła, role i uprawnienia. Twoja implementacja AuthorizingRealm wystarczyłaby do tego i stworzyła obiekty oczekiwane przez API Shiro.

Przeczytaj this document na sekwencji uwierzytelniania Shiro, aby dowiedzieć się, gdzie wchodzi AuthenticatingRealm.

chodzi o INIfile, w zależności od tego, jak realizować swoje Realm, trzeba byłoby uznać je jako

myRealm = com.company.security.shiro.YourDatabaseRealm 

ewentualnie ustawieniach niektóre właściwości

myRealm.databaseName = account_database 

Shiro zapewnia własny JdbcRealm klasę, która rozszerza AuthorizingRealm. Ta klasa zawiera pewne założenia dotyczące struktury bazy danych, ale można ją dostosować.

+0

Na koniec musiałem użyć BoneCP w celu dostarczenia źródła danych do Shiro, spodziewałem się zarządzać połączenie bez konieczności korzystania z zewnętrznych bibliotek. Dziękuję za cierpliwość w wyjaśnieniu tego. Byłem bardzo pomocny i na koniec udało mi się zaimplementować Shiro i rozumiem koncepcje z powodu twojego krótkiego wywodu tutaj. – Nivde

+0

@ nivde92 Nie ma za co. Pamiętaj, że powyższe zasady obowiązują niezależnie od używanego 'DataSource'. Mówimy o dwóch różnych warstwach. –

+0

Przykładowe tabele odzwierciedlają tylko * uprawnienia użytkownika *, ** nie ** * uprawnienia oparte na rolach *. * Oparte na rolach * zwykle oznacza również, że podmiot może mieć wiele ról. –

Powiązane problemy