request.isUserInRole ( « ADMIN ») renvoie également vrai pour les utilisateurs non rôle ADMIN mais le rôle UTILISATEUR

StackOverflow https://stackoverflow.com/questions/1968882

Question

Je suis en train d'essayer le JDBCRealm dans Glasshfish v3: J'ai 2 rôles USER et ADMIN.

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 ») retourne vrai aussi. request.isUserInRole ( "NONEXISTINGROLE") retourne false pour les deux.

Par exemple:

  

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

     

pour l'utilisateur loggedin: retourne 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!

Était-ce utile?

La solution

fixe il en faisant que le paramètre Realm « Assigner des groupes » est vide. GlassFish leur charge à partir du tableau du groupe.

Autres conseils

Vos applications de sécurité semblent bien au premier coup d'œil. Que diriez-vous vos correspondances d'utilisateurs? Il ressemble à ce que le même nom d'utilisateur est mis en correspondance sur l'utilisateur et les rôles d'administrateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top