2009-12-28 19 views
1

J'essaie actuellement le JDBCRealm dans Glasshfish v3: J'ai 2 rôles USER et ADMIN.request.isUserInRole ("ADMIN") renvoie également vrai pour l'utilisateur non dans le rôle ADMIN mais le rôle USER

J'ai un LoginServlet qui redirige vers une URL (par exemple/admin ou/utilisateur) basé sur la méthode request.isUserInRole ("ADMIN").

Le problème est quand un ADMIN est connecté, il retourne vrai, alors est redirigé vers/admin mais il peut également accéder à la/utilisateur. Lorsqu'un utilisateur est connecté, request.isUserInRole ("ADMIN") renvoie également la valeur true. request.isUserInRole ("NONEXISTINGROLE") renvoie false pour les deux.

Par exemple:

request.isUserInRole ("ADMIN") + " "+ request.isUserInRole (" USER ") +" "+ request.isUserInRole (" NONEXISTINGROLE")

pour loggedIn UTILISATEUR: renvoie true true false

pour ADMIN loggedin renvoie true true false

Ceci est une partie de mon web.xml:

<security-constraint> 
    <display-name>Constraint1</display-name> 
    <web-resource-collection> 
     <web-resource-name>adminProtected</web-resource-name> 
     <description>Administrator restricted area</description> 
     <url-pattern>/admin/*</url-pattern> 
     <http-method>GET</http-method> 
     <http-method>POST</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>ADMIN</role-name> 
    </auth-constraint> 
</security-constraint> 
<security-constraint> 
    <display-name>Constraint2</display-name> 
    <web-resource-collection> 
     <web-resource-name>userProtected</web-resource-name> 
     <description>User restricted area</description> 
     <url-pattern>/user/*</url-pattern> 
     <http-method>GET</http-method> 
     <http-method>POST</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>USER</role-name> 
    </auth-constraint> 
</security-constraint> 
<security-constraint> 
    <display-name>Constraint3</display-name> 
    <web-resource-collection> 
     <web-resource-name>LoginServlet</web-resource-name> 
     <description>All restricted area</description> 
     <url-pattern>/LoginServlet</url-pattern> 
     <http-method>GET</http-method> 
     <http-method>POST</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>USER</role-name> 
     <role-name>ADMIN</role-name> 
    </auth-constraint> 
</security-constraint> 

<login-config> 
    <auth-method>FORM</auth-method> 
    <realm-name>securityJDBC</realm-name> 
    <form-login-config> 
     <form-login-page>/login.jsf</form-login-page> 
     <form-error-page>/login.jsf</form-error-page> 
    </form-login-config> 
</login-config> 

<security-role> 
    <description></description> 

    <role-name>USER</role-name> 
</security-role> 
<security-role> 
    <description></description> 
    <role-name>ADMIN</role-name> 
</security-role> 
<servlet> 
    <description></description> 
    <display-name>LoginServlet</display-name> 
    <servlet-name>LoginServlet</servlet-name> 
    <servlet-class>controllers.LoginServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>LoginServlet</servlet-name> 
    <url-pattern>/LoginServlet</url-pattern> 
</servlet-mapping> 

Et mon soleil web.xml:

<security-role-mapping> 
    <role-name>USER</role-name> 
    <group-name>USER</group-name> 
</security-role-mapping> 
<security-role-mapping> 
    <role-name>ADMIN</role-name> 
    <group-name>ADMIN</group-name> 
</security-role-mapping> 

Merci!

Répondre

2

le fixe en faisant que le paramètre Realm « Assigner des groupes » est vide. Glassfish les chargera à partir de la table de groupe.

0

Vos applications de sécurité semblent bien au premier coup d'œil. Que diriez-vous de vos mappages d'utilisateur? Il semble que le même nom d'utilisateur soit mappé sur les rôles utilisateur et administrateur.

+0

J'ai 2 tables: SecurityGroup: id; groupId; userid; 1; ADMIN; 1 2; UTILISATEUR; 2 securityUser; id, mot de passe, userid, employeur 1, 21232f297a57a5a743894a0e4a801fc3, un; 1 2; ee11cbb19052e40b07aac0ca060c23ee; u; 2 –

+0

propriétés Glassfish Realm: Jaas Contexte: JDBCRealm Table utilisateur: securityuser colonne Nom d'utilisateur: ID utilisateur Mot de passe Colonne: Mot de passe Groupe Tableau: securitygroup Nom du groupe Colonne: groupId –

+0

J'ai trouvé quelque chose: Si je mets le paramètre Realm « Assigner des groupes » à USER, ADMIN je reçois le problème d'origine. Si vous le mettez vide, je peux me connecter mais j'ai un accès refusé pour toutes les contraintes de sécurité ... –