request.isuserinRole ("admin") também retorna true para o usuário não está no administrador da função, mas o usuário de função
-
21-09-2019 - |
Pergunta
Atualmente, estou experimentando o JDBCrealm em Glasshfish v3: tenho 2 funções de usuário e administrador.
Eu tenho um LogInservlet que redireciona para um URL (digamos /admin ou /usuário) com base no método request.isuserinRole ("admin").
O problema é que quando um administrador é registrado, ele retorna true, por isso é redirecionado para /admin, mas ele também pode acessar o /usuário. Quando um usuário é logado no request.isuserinRole ("admin") retorna também true. request.isuserinRole ("não existindo") retorna false para ambos.
Por exemplo:
request.isuserinRole ("admin")+ ""+ request.isuserinRole ("user")+ ""+ request.isuserinRole ("não existente")
Para o usuário loggedin: retorna verdadeiro false
Para o admin Loggedin, retorna verdadeiro verdadeiro false
Esta faz parte do meu 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 meu sol-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>
Obrigada!
Solução
Corrigido certificando -se de que a configuração do reino "atribui grupos" esteja vazia. Glassfish os carregará da tabela do grupo.
Outras dicas
Seus mapeamentos de segurança parecem bem à primeira vista. Que tal seus mapeamentos de usuário? Parece que o mesmo nome de usuário é mapeado nas funções do usuário e do administrador.