Request.IsuserinRole („admin“) gibt auch für Benutzer nicht in Rollenverwaltung, sondern in Rollenbenutzer true zurück

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

Frage

Ich probiere derzeit das JDBCREALM in Glasshfish V3 aus: Ich habe 2 Rollen -Benutzer und Administrator.

Ich habe ein LoginServlet, das basierend auf der Anforderung zu einer URL (Say /Admin oder /Benutzer) weiterleitet.

Das Problem ist, wenn ein Administrator darin angemeldet ist, dass es true zurückgibt, wird also in /admin weitergeleitet, aber er kann auch auf den /Benutzer zugreifen. Wenn ein Benutzer in Anforderung angemeldet ist. IsuserinRole ("admin") gibt auch true zurück. request.isuserinrole ("nicht existingingrole") gibt für beide false zurück.

Z.B:

request.isuserinrole ("admin")+ ""+ request.isserinrole ("user")+ ""+ request.isuserinrole ("nicht existingrole")

Für Protokolledin -Benutzer: Gibt true true false zurück

Für Protokolledin -Administratente gibt True True Falsch zurück

Dies ist ein Teil meines 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>

Und meine sun-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>

Vielen Dank!

War es hilfreich?

Lösung

Es wurde behoben, indem sichergestellt wird, dass die Reich "Gruppen zuweisen" leer ist. Glassfish lädt sie aus dem Gruppentisch.

Andere Tipps

Ihre Sicherheitszuordnungen sehen auf den ersten Blick gut aus. Wie wäre es mit Ihren Benutzerzuordnungen? Es sieht so aus, als würde der gleiche Benutzername sowohl auf die Benutzer- als auch auf die Administratorrollen abgebildet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top