Carcleo 4 Denunciar post Postado Julho 2, 2015 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? Compartilhar este post Link para o post Compartilhar em outros sites
Vergil 15 Denunciar post Postado Julho 3, 2015 Implemente um filtro para validação do usuário que iniciou a requisição. http://docs.oracle.com/javaee/6/api/javax/servlet/Filter.html Nem me darei o trabalho de apresentar um exemplo porque na internet você acha um montão deles. Faça uma consulta na internet com os parâmetros "java servlet filter login". Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Julho 3, 2015 Obrigado, vou procurar sim. Mas agora fiz várias modificações nos arquivos e depois quando fui rodar o tomcat não quer iniciar de jeito nenhum no Eclipse e a unica mensagem que dá é uma janelinha dizendo que o Tomcat falhou para iniciar. O que pode ser? O detalhe é que se eu startar o tomcat fora do Eclipse e starta e para normal Se puder dar uma olhada, os fonte e o sql estão em http://funerariasaopedro.net.br/imwsaogotardo.zip Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Julho 3, 2015 Ok. Resolvi o problema do servidor não startar. Era que estava dentro de uma servlet com nome de outra! Agora o problema é o seguinte: Estou seguindo esse tuto: http://uaihebert.com/autenticacao-de-usuarios-filterservlet/, daí, fiz o filtro igual, mas quando abro o site, ele já vai direto dano erro 404 na página principal! Qual será o problema? Eis o web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>imwsaogotardo</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>AdminServlet</servlet-name> <servlet-class>imwsaogotardo.src.controller.AdminServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AdminServlet</servlet-name> <url-pattern>/imwsaogotardo/AdminServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>ProfessorServlet</servlet-name> <servlet-class>imwsaogotardo.src.controller.ProfessorServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ProfessorServlet</servlet-name> <url-pattern>/imwsaogotardo/ProfessorServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>SalaServlet</servlet-name> <servlet-class>imwsaogotardo.src.controller.SalaServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>SalaServlet</servlet-name> <url-pattern>/imwsaogotardo/SalaServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>UsuarioServlet</servlet-name> <servlet-class>imwsaogotardo.src.controller.UsuarioServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UsuarioServlet</servlet-name> <url-pattern>/imwsaogotardo/UsuarioServlet</url-pattern> </servlet-mapping> <filter> <filter-name>LoginAdmin</filter-name> <filter-class>imwsaogotardo.src.filter.admin.LoginAdmin</filter-class> <init-param> <param-name>loginActionURI</param-name> <param-value>/imwsaogotardo/UsuarioServlet</param-value> </init-param> </filter> </web-app> Compartilhar este post Link para o post Compartilhar em outros sites
Vergil 15 Denunciar post Postado Julho 3, 2015 Certamente o seu filter está redirecionando pra uma página inexistente. Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Julho 9, 2015 Eis o código: package filter.admin; import java.io.IOException; import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession; import model.Admin; @WebFilter("/LoginAdmin")public class LoginAdmin implements Filter {private String LOGIN_ACTION_URI; public void init(FilterConfig fConfig) throws ServletException {// TODO Auto-generated method stubLOGIN_ACTION_URI = fConfig.getInitParameter("loginActionURI");} public LoginAdmin() { // TODO Auto-generated constructor stub } public void destroy() {// TODO Auto-generated method stub} public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {// TODO Auto-generated method stub HttpServletRequest req = (HttpServletRequest) request; HttpSession session = req.getSession(); Admin admin = (Admin) session.getAttribute("admin"); if (admin == null && !LOGIN_ACTION_URI.equals(req.getRequestURI())){ RequestDispatcher rd = req.getRequestDispatcher("/login.jsp"); rd.forward(request, response); return; } chain.doFilter(request, response); }} Algo errado? Aqui eu coloquei <filter> <filter-name>LoginAdmin</filter-name> <filter-class>imwsaogotardo.src.filter.admin.LoginAdmin</filter-class> // Endereço do filtro <init-param> <param-name>loginActionURI</param-name> <param-value>/imwsaogotardo/UsuarioServlet</param-value> // O Servlet de login </init-param></filter> Aqui, no filtro, eu coloquei o endereço para onde esta o arquivo de login. ...public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {// TODO Auto-generated method stub HttpServletRequest req = (HttpServletRequest) request; HttpSession session = req.getSession(); Admin admin = (Admin) session.getAttribute("admin"); if (admin == null && !LOGIN_ACTION_URI.equals(req.getRequestURI())) { RequestDispatcher rd = req.getRequestDispatcher("/admin/index.jsp"); // site/admin/index.jsp é a página de login rd.forward(request, response); return; } chain.doFilter(request, response); }... Gente, me ajuda. Até hoje não consegui colocar o filtro para funcionar! Basta colocar no xml e até pagina que existe ele diz que não existe! Compartilhar este post Link para o post Compartilhar em outros sites