request.isUserInRole ( “Admin”) restituisce vero anche per l'utente non in ruolo di amministratore, ma ruolo utente

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

Domanda

Al momento sto provando la JDBCRealm in Glasshfish v3: Ho 2 ruoli utente e ADMIN.

Ho un LoginServlet che reindirizza a un URL (diciamo / admin o / utente) basato sul metodo request.isUserInRole ( "Admin").

Il problema è che quando un ADMIN viene registrato in esso restituisce true, quindi viene reindirizzato a / admin ma può anche accedere al / utente. Quando un utente è connesso a request.isUserInRole ( "Admin") restituisce true anche. request.isUserInRole ( "NONEXISTINGROLE") restituisce false per entrambi.

Esempio:

  

request.isUserInRole ( "admin") +" "+   request.isUserInRole ( "Utente") +" "+   request.isUserInRole ( "NONEXISTINGROLE")

     

per loggedin UTENTE: restituisce true true false

     

per loggedin ADMIN restituisce true   true false

Questa è una parte del mio 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>

E il mio sole-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>

Grazie!

È stato utile?

Soluzione

fissi è di fare in modo l'impostazione "Gruppi" Assegnare Realm è vuoto. Glassfish li caricherà dalla tabella del gruppo.

Altri suggerimenti

I tuoi mapping di protezione vanno bene a prima vista. Come circa le mappature utente? E sembra che lo stesso nome utente è mappato su entrambi i ruoli utente e amministratore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top