2009-07-31 7 views
1

http://www.docjar.com/html/api/org/apache/catalina/realm/JDBCRealm.java.htmlY at-il un bogue dans org.apache.catalina.realm.JDBCRealm?

Pour utiliser ce JDBCRealm, nous avons besoin de deux tables, user et user_role.

user table - user_id, user_name, user_password 
user_role table - user_id, role_id, user_name 

Pourquoi nom_utilisateur est requis dans la table user_role lorsque user_id est présent en tant que clé étrangère. JDBCRealm aurait pu utiliser une requête de jointure pour extraire des rôles ou une requête directe si elle stocke l'id_utilisateur de la requête précédente.

Répondre

1

Voici Tomcat 6 documentation pour JDBCRealm.

user_id n'est PAS requis dans les deux tables, ni role_id. users table doit avoir user_name et user_password colonnes; roles table devrait avoir user_name et role_name colonnes. Les tables sont liées via user_name.

La raison pour laquelle il est fait de cette façon (chaîne ids plutôt que numérique) est parce que Principal avait comme nom String et isUserInRole() appel prend le nom de rôle String ainsi.

+0

Vous pouvez même utiliser une seule table pour les utilisateurs/rôles. create table users {nom d'utilisateur varchar (64), mot de passe varchar (64), rôle varchar (64), UNIQUE KEY uname_key (nom d'utilisateur)); fonctionne bien. – nos

+1

ce qui n'est pas une structure normalisée car un utilisateur peut avoir plusieurs rôles –