Zugriffsberechtigte über ein JDBCRealm aus MySQL-Datenbank laden

Im Beitrag [post id=4748]Sicherheit durch Zugriffsbeschränkungen in JEE Web-Anwendungen[/post] wurde gezeigt, wie man bestimmte Seiten nur für gewisse Benutzer und Benutzergruppen sichtbar macht. Allerdings musste man diese Benutzer direkt in der Konfigurationsdatei vom Apache Tomcat 7 Application Server eintragen. Das ist nicht besonders flexibel. Deswegen werden wir im nächsten Schritt die Zugriffsberechtigungen aus einer MySQL-Datenbank holen. Dafür können wir unsere bestehende JDBC-Ressource jdbc/foo4 (aus dem Beispiel [post id=4709]JDBC-Ressource über JNDI referenzieren und mit Tomcat verwenden[/post]) benutzen.

Benutzer und Benutzergruppen in MySQL-Datenbank anlegen

script.sql

1
2
3
4
5
6
7
USE `foo4`
-- Create necessary tables
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));
-- Insert sample data
INSERT INTO users(user_name,user_pass) VALUES ('benny','test'); 
INSERT INTO user_roles(user_name,role_name) VALUES ('benny','admin');

Tomcat JDBCRealm anlegen

src/main/webapp/META-INF/context.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/my-webapp">
  <!-- JDBC DataSource -->
  <Resource name="jdbc/foo4"
            type="javax.sql.DataSource"
            factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost:3306/foo4"
            username="root"
            password="root"
            maxActive="8" 
            maxIdle="4" 
            maxWait="10000"
            auth="Container"
          />
  <!-- JDBCRealm -->
  <Realm localDataSource="true"
         className="org.apache.catalina.realm.DataSourceRealm"
         dataSourceName="jdbc/foo4"
         userTable="users" 
         userNameCol="user_name" 
         userCredCol="user_pass"
         userRoleTable="user_roles" 
         roleNameCol="role_name"/>
</Context>

Das war’s schon! Ab jetzt werden die Benutzer nicht mehr aus der Datei %CATALINA_HOME%\conf\tomcat-users.xml geladen, sondern aus der MySQL-Datenbank namens foo4.

Wichtig: Das Realm muss die Eigenschaft localDataSource auf true gesetzt haben, weil das Realm lokal in der context.xml der Web-Applikation definiert wird.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.