request.isUserInRole ( « ADMIN ») renvoie également vrai pour les utilisateurs non rôle ADMIN mais le rôle UTILISATEUR
-
21-09-2019 - |
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!
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.