Login: Session, variável global ou Classe?
Pessoal, estou fazendo um sistema de cadastro de clientes e para que um administrador possa tratar um cliente ele precisará estar logado!
Acontece que estou na dúvida de como guardar seu logon de forma tal que fique à disposição em todo o sistema!
Então, eu fiz um formulário "Login e Senha" convencional enviando via Post os dados para um Servlet que vai chamar as consultas de existência e bloqueio de Administrador que estão em uma classe "Admin".
Tudo funciona corretamente.
Eis o servlet:
package controller; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import dao.admin.AutenticaAdmin; import model.Admin; @WebServlet("/LogonServlet") public class LogonServlet extends HttpServlet { private static final long serialVersionUID = 1L; public LogonServlet() { super(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String acao = request.getParameter("acao"); String login = request.getParameter("login"); String senha = request.getParameter("senha"); if (acao.equals("logar")) { AutenticaAdmin autenticaAdmin = new AutenticaAdmin(); Admin admin = autenticaAdmin.pesquisaAutenticaAdmin (login, senha); if(admin!=null) { HttpSession sessao = request.getSession(); if(admin.getStatus().equals("d")) { sessao.setAttribute("admin", admin); response.sendRedirect("admin/retornos/admin/loginOK.jsp"); } else { sessao.setAttribute("nomeAdmin", admin.getNome()); response.sendRedirect("admin/retornos/admin/loginBloqueado.jsp"); } } else { response.sendRedirect("admin/retornos/admin/loginERRO.jsp"); } } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); //HttpSession sessao = request.getSession(); //String acao = request.getParameter("acao"); } }
A função abaixo retorna ou um Admin ou null.
autenticaAdmin.pesquisaAutenticaAdmin (login, senha);
O problema é que estou tendo problemas em testar nas páginas se o usuário sta autenticado ou não.
Se não, tranquilo, a própria servlet já redireciona. Mas caso o usuario navegue direto à página, preciso testar.
Então estou fazendo assim nas páginas .jsp
<%@ include file="../../../_global/sessoes.jsp"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="model.Admin" %> <% if (session.getAttribute("admin")!=null) { Admin admin = (Admin) session.getAttribute("admin"); out.println("Olá "+admin.getNome()); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link type="text/css" rel="stylesheet" href="../_global/_css/estiloSite.css" /> <title><%=tituloSiteAdmin %></title> </head> <body> <div id="topo"> <jsp:include page="../_global/topoAdmin.jsp" /> </div> <div id="meio"> <jsp:include page="principalConteudo.jsp" /> </div> <div id="mapa"> <jsp:include page="../_global/mapaAdmin.jsp" /> </div> <div id="creditos"> <jsp:include page="../_global/creditosAdmin.jsp" /> </div> </body> </html> <% } else { response.sendRedirect("index.jsp"); } %>
Qual a melhor forma de fazer isso?