3
respostas

Duvida de como aplicar Filter no meu Projeto - JSP

Estou aprendendo JSP, e já fiz com que o usuário não entre no sistema caso não esteja Logado.

Controller


@WebServlet("/mvc")
public class ControllerServlet extends HttpServlet {


    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String parametro = request.getParameter("logica");

        if(parametro == null){
            throw new IllegalArgumentException("Falta passar o parametro.");
        }
        try {
            String nomeDaClasse = "br.com.triadworks.todoList.logica." + parametro;
            Class<?> classe = Class.forName(nomeDaClasse);
            Logica logica = (Logica) classe.newInstance();
            String pagina = logica.executa(request, response);
            request.getRequestDispatcher(pagina).forward(request, response);
        } catch (Exception e) {
            throw new ServletException("A lógica causou uma exceção!", e);
        }
    }
}
public interface Logica {

    String executa(HttpServletRequest request, HttpServletResponse response) throws Exception;
}

Logica

public class AdicionaTarefa implements Logica {

    @Override
    public String executa(HttpServletRequest request, HttpServletResponse response) {

        if (request.getSession().getAttribute("usuarioLogado") != null) {
            Connection connection = (Connection) request.getAttribute("connection");

            List<Usuario> usuarios = new UsuarioDAO(connection).buscarTodosUsuarios();
            List<Situacao> statusSituacao = Arrays.asList(Situacao.values());

            request.setAttribute("usuarios", usuarios);
            request.setAttribute("statusTarefas", statusSituacao);

            return "WEB-INF/jsp/view/adicionar.jsp";
        }
        return "mvc?logica=TelaLogin";
    }

}

Classe que eu pego o Usuário e guardo na sessão

public class LoginTarefaLogic implements Logica {

    @Override
    public String executa(HttpServletRequest request, HttpServletResponse response) throws Exception {
        Connection connection = (Connection) request.getAttribute("connection");

        String login = request.getParameter("usuario");
        String senha = request.getParameter("senha");

        Usuario usuarioAutenticado = new UsuarioDAO(connection).autenticar(new Usuario(login, senha));

        if (usuarioAutenticado != null) {
            System.out.println(request.getRequestURI());
            pegaSessaoUsuario(request, usuarioAutenticado);
            return "mvc?logica=AdicionaTarefa";
        } else {
            return "mvc?logica=TelaLogin";
        }
    }

    public static void pegaSessaoUsuario(HttpServletRequest request, Usuario usuarioAutenticado) {
        HttpSession session = request.getSession();
        session.setAttribute("usuarioLogado", usuarioAutenticado);
        System.out.println("Usuario: " +usuarioAutenticado.getNome() + "ID" + usuarioAutenticado.getId() + "senha: " +usuarioAutenticado.getSenha());
    }
}

OBS: Minhas páginas estão escondidas dentro de WEB-INF/jsp/view

OBS: Como faço para aplicar um filter nesse meu código? Veja que cada logica estou colocando um if para saber se existe Sessão, e isso pode ficar trabalhoso porque eu posso ter muitas Logicas...

3 respostas

Bom dia Dayson, crie uma classe que implementa Filter e verifica a session dentro do método doChain()

Obrigado pela ajuda, eu fiz assim. até agora sem sucesso!


@WebFilter("/*")
public class FilterAutenticador implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {

        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
        HttpServletResponse httpServletResponse = (HttpServletResponse) response;
        HttpSession session = httpServletRequest.getSession();
        if (session.getAttribute("usuarioLogado") != null) {
            chain.doFilter(request, response);
        } else {
            httpServletResponse.sendRedirect("index.jsp");
        }
    }
}

ainda estou meio enrolado nesse problema rsrs...