|
Strona główna Zbieranina Serwisy Porady Projekty Humor sektora IT TODO Nowości Ostatnie zmiany Kontakt Find pages
Set your name in
UserPreferences Referenced by
JSPWiki v2.2.33
|
Java/Tomcat - jak zdefiniować użytkowników, hasła i role do autoryzacji po stronie kontenera (J2EE Security)Table of ContentsJ2EE Security definiuje model tzw. role based security, czyli z polskiego na nasze, w aplikacji określamy jakie role są wymagane do wykonania określonej czynności, przydzielamy użytkowników do określonych ról... i tyle. Resztą zajmuje się już kontener. W przypadku Tomcata do dyspozycji mamy trzy sposoby: Baza użytkowników w pliku tomcat-users.xmlJest to najprostrzy sposób definiowania użytkowników i ról. Wszystkie informacje zapisane są w pliku XML, standardowa jego lokalizacja to conf/tomcat-users.xml. Wygląda on następująco: <?xml version='1.0' encoding='utf-8'?> <tomcat-users> <role rolename="NazwaRoli"/> <role rolename="NazwaRoli2"/> <role rolename="KolejnaRola"/> <user username="user1" password="haslo_usera" roles="KolejnaRola"/> <user username="user2" password="haslo" roles="NazwaRoli2,KolejnaRola"/> </tomcat-users> Jak widać plik jest samoopisujący się. Definiujemy najpierw listę ról, następnie listę użytkowników (z hasłami podanymi otwartym tekstem) oraz z lista ról oddzieloną przecinkami. Minusem tej metody jest konieczność restartu Tomcata po każdej zmianie w tym pliku. Dostęp do bazy użytkowników poprzez JMXDo standardowej bazy użytkowników Tomcata, tej przechowywanej w pliku conf/tomcat-users.xml można się także dostać za pośrednictwem technologii JMX. Można skorzystać z dowolnego narzędzia do zarządzania aplikacją, bądź z prostej webowej konsoli: JmxConsole. Użytkownicy w bazie danych dostępnej poprzez JDBCRozwiązanie dużo bardziej elastyczne niż poprzednie. Główną zaletą jest możliwość dodawania nowych użytkowników do bazy bez konieczności restartu Tomcata. Jedyne co potrzeba to umieścić driver JDBC do bazy danych w katalogu common/lib Tomcata, dokonać małej zmiany w pliku conf/server.xml oraz oczywiście przygotować bazę danych z listą użytkowników i ról. W pliku conf/server.xml dodajemy element <Realm> wewnątrz wybranego elementu: <Engine>, <Host> bądź <Context> - w zależności jak dużą propagację bazy użytkowników chcemy osiągnąć. Baza użytkowników może być globalna dla całego Tomcata, tylko dla wybranego Hosta, bądź nawet widoczna tylko dla wybranej aplikacji. Podajemy następujące atrybuty dla elementu <Realm>:
<Realm
className="org.apache.catalina.realm.JDBCRealm"
connectionName="login do bazy danych"
connectionPassword="hasło do bazy danych"
connectionURL="definicja połączenia do bazy danych jako JDBC URL"
driverName="nazwa klasy drivera JDBC"
roleNameCol="nazwa kolumny w tabeli user_roles z nazwa roli przypisanej użytkownikowi"
userCredCol="nazwa kolumny w tabeli users zawierającej hasło użytkownika"
userNameCol="nazwa kolumny w tabelach users i user_roles z nazwą użytkownika"
userRoleTable="nazwa tabeli user_roles"
userTable="nazwa tabeli users"
/>
Tworzymy obiekty w bazie danych za pomocą analogicznych poleceń SQL: create table users ( user_name varchar(15) not null primary key, user_pass varchar(15) not null ); create table user_roles ( user_name varchar(15) not null, role_name varchar(15) not null, primary key (user_name, role_name) ); I tyle. Opcjonalnie można używać haszowanych haseł. W tym celu należy dodać do elementu <Realm> atrybut digest określający sposób kodowania haseł. Wartośc atrybutu musi być zgodna z nazwami algorytmów podanymi w klasie java.security.MessageDigest. Można także użyć odmiany tej metody używającej podanego DataSource zamiast explicite podanego połączenia do bazy danych, bądź nawet odczytywanej z JNDI bazy użytkowników. Szczegóły na stronie http://tomcat.apache.org/tomcat-5.5-doc/realm-howto.html Integracja z technologią JAASJest to trochę bardziej skomplikowana sprawa. Pozwala jednak na pełną kontrolę nad bazą użytkowników, sposobem logowania, itd. Za pomocą tej metody można w łatwy sposób uzależnić logowanie od dodatkowych czynników (mp. daty czy godziny). Polecam artykuł wprowadzający do technologii JAAS.
|
||||||