solicitud.isUserInRole("ADMIN") también devuelve true para que el usuario no en función de ADMINISTRADOR, pero el papel de USUARIO
-
21-09-2019 - |
Pregunta
Actualmente estoy tratando de salir de la JDBCRealm en Glasshfish v3:Tengo 2 roles de USUARIO y ADMINISTRADOR.
Tengo un LoginServlet que redirige a una url (decir /admin /o usuario) basado en la solicitud.isUserInRole("ADMIN") método.
El problema es cuando un ADMINISTRADOR se registra en la devuelve true, por lo que se redirige a /admin pero también se puede acceder a la /usuario.Cuando un USUARIO se registra en la solicitud.isUserInRole("ADMIN") devuelve true.solicitud.isUserInRole("NONEXISTINGROLE") devuelve false para ambos.
Por ejemplo:
solicitud.isUserInRole("ADMIN") +" "+ solicitud.isUserInRole("USUARIO")+" "+ solicitud.isUserInRole("NONEXISTINGROLE")
para loggedin USUARIO:devuelve true true false
para loggedin ADMIN devuelve true verdadero falso
Esta es una parte de mi 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>
Y mi 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>
Gracias!
Solución
Fijo que asegurarse de que el valor de Reino "Asignar Grupos" está vacía.Glassfish se los carga a partir de la Tabla del Grupo.
Otros consejos
Su seguridad asignaciones ve bien a primera vista.¿Cómo es su usuario asignaciones?La apariencia de que el mismo nombre de usuario es asignado por el usuario y funciones de administrador.