Jstl - Condição if na JSP para pegar um parametro da MODEL

Bom dia!

Estou tentando fazer minha JSP (index.jsp) executar uma condição (if) com taglib, para decidir qual menu ela vai importar, dependendo de um atributo (permissao(boolean)) que esta na model (usuario.java).

Já realizei o debug para verificar se o método + validar esta puxando as informações correta do banco. Esta funcionando normal.

Mas o problema esta em passar isso para a JSP, para ela conseguir fazer o teste.

O teste que estou tentando fazer é simples:

c:if test ="${usuario.permissao == true}"
c:import url=“MenuAdmin.jsp”/
/c:if

Esse é meu código do command, onde realizo a validação de login. (Não sei se estou passando de forma correta para a JSP.)

public class FazerLogin implements Command {
@Override
public void executar(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String login = request.getParameter(“username”);
String senha = request.getParameter(“password”);

    Usuario usuario = new Usuario();
    usuario.setUsuario(login);
    usuario.setSenha(senha);
    UsuarioService service = new UsuarioService();

    if(service.validar(usuario)){
        HttpSession session = request.getSession();
        session.setAttribute("usuarioLogado", usuario.getUsuario());
        System.out.println("Logou "+ usuario.getUsuario());
    } else {
        System.out.println("Não logou "+ usuario.getUsuario());
        throw new ServletException("Usuario/Senha inválidos");
    }
    request.setAttribute("usuario", usuario);
    response.sendRedirect("Index.jsp");
}

}
Quando eu faço o teste para verificar se a {usuario.permissao == false}, ele retorna true. Mas o estranho que o método no debug, mostra que a permissão está true.

Eu pego do banco o atributo permissão, lá no método que fica no DAO. e guardo ele com

usuario.setPermissao(rs.getBoolean(“permissao”));

No debug ele pega e armazena a informação corretamente. O problema esta em passar para a JSP.

<c:if test="${usuario.permissao == true}">
		<c:import url="MenuAdmin.jsp"/>
	</c:if>
	<c:if test="${usuario.permissao == false}">
 		<c:import url="Menu.jsp"/>
</c:if>

Consegui resolver a questão da JSP entender o parametro.
Alterei de request.setAttribute para session.setAttribute.

if(service.validar(usuario)){
		HttpSession session = request.getSession();
		session.setAttribute("usuario", usuario);
		session.setAttribute("usuarioLogado", usuario.getUsuario());
		System.out.println("Logou "+ usuario.getUsuario());
	} else {
		System.out.println("Não logou "+ usuario.getUsuario());
		throw new ServletException("Usuario/Senha inválidos");
	}		
	response.sendRedirect("Index.jsp");

Agora o problema esta em fazer a troca de menus.
Quando o usuario faz login a pagina “Index.html” ela importa o “Menu.jsp”.

Dentro deste “Menu.jsp” tem um if para validar a permissão dele.

Menu.jsp

<c:if test="${usuario.permissao == true}">
reponse.sendRedirect("MenuAdmin.jsp");</c:if>

Mas não esta direcionando. Quero saber se isso é possível.

teste correto é

<c:if test="${usuario.permissao eq true}">
      //algo
   </c:if>
<c:if test="${usuario.permissao eq false}">
      //algo
   </c:if>

Ok, mas eu não consegui executar o redirect para puxar a outra JSP.

A validação esta funcionando normal.

Seja == true ou eq true.

Ai só não estou conseguindo redirecionar o “Menu.jsp” para chamar o “MenuAdmin.jsp”.

1 curtida

Acredito que o correto seria você utilizar um Filter e nele verificar se o usuário tem permissão ou não.
Pelo JSP, teria este problema, como obrigar o usuário a ser redirecionado na pagina sem clickar em algum link, Não acredito que ele tenha essa possibilidade, pois ele foi feito para apresentar informações.

https://www.caelum.com.br/apostila-java-web/recursos-importantes-filtros/#10-6-exercicios-filtros

Aparentemente da sim para fazer um redirecionamento, porém recomendo fazer a segurança pelo Filtro, segue o link se for redirecionamento pelo JSP: http://stackoverflow.com/questions/4967482/redirect-pages-in-jsp

Amigo, isso ira te ajudar, session.