JSPWiki logo
Strona główna
Zbieranina
Serwisy
Porady
Projekty
Humor sektora IT
TODO
Nowości
Ostatnie zmiany
Kontakt

Find pages
Unused pages
Undefined pages
Page Index

Set your name in
UserPreferences

Edit this page


Referenced by
Java Struts_akcje_lo...
Porady




JSPWiki v2.2.33


Java Tomcat_j 2 ee_security


Java/Tomcat - jak zdefiniować użytkowników, hasła i role do autoryzacji po stronie kontenera (J2EE Security)

J2EE 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.xml

Jest 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 JMX

Do 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 JDBC

Rozwią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ą JAAS

Jest 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.




Go to top   Edit this page   More info...   Attach file...
This page last changed on 26-Oct-2006 08:15:56 GMT by mikolajr.