request.isUserInRole ( “Admin”) restituisce vero anche per l'utente non in ruolo di amministratore, ma ruolo utente
-
21-09-2019 - |
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!
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.