GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Servlet Filter

Tags: #<Tag:0x00007f0a803f6948>

Boa noite,
Estou utilizando filter para filtrar as requisições porém está permitindo acessar as páginas mesmo sem o usuário estar logado.

package filter;

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 beans.Usuario;
import dao.DaoUsuario;

@WebFilter(urlPatterns={"/*"})    
public class FilterAutenticacao implements Filter{ 
 
	//faz alguma coisa quando a aplicação é derrubada
	@Override
	public void destroy() {
		
	}

	//intercepta todas as requisições
	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		
			HttpServletRequest req = (HttpServletRequest) request;
			HttpSession session = req.getSession();
			
			String urlParaAutenticar = req.getServletPath();	
			// retorna null caso não esteja logado
		    Usuario usuario = (Usuario) session.getAttribute("usuario");
		    
		    if (usuario == null && !urlParaAutenticar.equalsIgnoreCase("/pages/ServletAutenticacao")){ // usuário não logado
		    	RequestDispatcher dispatcher = request.getRequestDispatcher("/index.jsp?url="+urlParaAutenticar);
		    	dispatcher.forward(request, response);
		    	return;// para o processo para redirecionar
		    }
	 	
			// executa as ações do request e response
			chain.doFilter(request, response);
		
	}

	// executa alguma coisa quando a aplicação é iniciada
	@Override
	public void init(FilterConfig arg0) throws ServletException {
		
	}

}
package servlet;

import java.io.IOException;
import java.net.InetAddress;

import javax.servlet.RequestDispatcher;
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.DaoLogin;
import dao.DaoOcorrenciaAcesso;
import beans.OcorrenciaAcesso;
import beans.Usuario;

@WebServlet("/ServletAutenticacao")
public class ServletAutenticacao extends HttpServlet {
	private static final long serialVersionUID = 1L;

	private DaoLogin daoLogin = new DaoLogin();

	public ServletAutenticacao() {
		super();
	}

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		
		if(Boolean.parseBoolean(request.getParameter("deslogar"))){
			//adicionar usuario logado na sessao
			HttpServletRequest req = (HttpServletRequest) request;
			HttpSession session = req.getSession();
			session.invalidate();
			//redireciona para login novamente
			response.sendRedirect("index.jsp");
		}
	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		String login = request.getParameter("login");
		String senha = request.getParameter("senha");
		String ipDaMaquina = InetAddress.getLocalHost().getHostAddress();
	    //System.out.println(ipDaMaquina);
	        //nome da maquina.
	    String nomeDaMaquina = InetAddress.getLocalHost().getHostName();
	    //System.out.println(nomeDaMaquina);

		String url = request.getParameter("url");

		// neste momento pode ser feito uma validação no banco de dados
		try {
			if (login != null && !login.isEmpty() && senha != null
					&& !senha.isEmpty()) {
				if (daoLogin.validarLogin(login, senha)) {
				// se o login foi bem sucedido

				Usuario usuario = new Usuario();
				usuario.setLogin(login);
				usuario.setSenha(senha);
				
				OcorrenciaAcesso ocorrenciaAcesso = new OcorrenciaAcesso();
				ocorrenciaAcesso.setLogin(login);
				ocorrenciaAcesso.setIpDaMaquina(ipDaMaquina);
				ocorrenciaAcesso.setNomeDaMaquina(nomeDaMaquina);
				
				DaoOcorrenciaAcesso daoOcorrenciaAcesso = new DaoOcorrenciaAcesso();
				
				daoOcorrenciaAcesso.salvarOcorrenciaAcesso(ocorrenciaAcesso);
				

				// adiciona usuário logado na sessão
				HttpServletRequest req = (HttpServletRequest) request;
				HttpSession session = req.getSession();
				session.setAttribute("login", usuario);


				// redireciona para o sistema e autoriza
				RequestDispatcher dispatcher = request
						.getRequestDispatcher("pages/usuario.jsp");
				dispatcher.forward(request, response);
				
				//gravar log de acesso
				
				
				
				
				} else {// acesso negado
					RequestDispatcher dispatcher = request
							.getRequestDispatcher("acessonegado.jsp");
					dispatcher.forward(request, response);
				}

			} else {// se o login falhou
					// redireciona para login novamente
				RequestDispatcher dispatcher = request
						.getRequestDispatcher("/index.jsp");
				dispatcher.forward(request, response);
			}

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}
package servlet;

import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.imageio.ImageIO;
import javax.servlet.RequestDispatcher;
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.Part;
import javax.xml.bind.DatatypeConverter;

import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.tomcat.util.codec.binary.Base64;

import beans.Ocorrencia;
import beans.Usuario;
import dao.DaoUsuario;

/**
 * Servlet implementation class ServletUsuario
 */
@WebServlet("/salvarUsuario")
public class ServletUsuario extends HttpServlet {
	private static final long serialVersionUID = 1L;

	private DaoUsuario daoUsuario = new DaoUsuario();

	Ocorrencia ocorrencia = new Ocorrencia();

	public ServletUsuario() {
		super();

	}
	private String acaoGet;
	private String sessionUsuario;
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		
		

		try {
			

			String acao = request.getParameter("acao")  != null ? request.getParameter("acao"): "listartodos";
			String user = request.getParameter("user");
			acaoGet = acao; 

			if (acao != null && acao.equalsIgnoreCase("listartodos"))

			{

				RequestDispatcher view = request
						.getRequestDispatcher("/pages/usuario.jsp");
				request.setAttribute("usuarios", daoUsuario.listar());
				view.forward(request, response);

			}

			else if (acao != null && acao.equalsIgnoreCase("delete")
					&& user != null) {
				daoUsuario.delete(user);
				request.setAttribute("msg",  "Usuário excluído com Sucesso!");
				//Tipo de mensagem
				request.setAttribute("tipo", "success");
				// daoUsuario.salvarOcorrencia(ocorrencia);
				// daoUsuario.deleteOcorrencia(ocorrencia);
				daoUsuario.acaoPagina(acaoGet);
				daoUsuario.recuperarID();
				daoUsuario.recuperarNome();
				daoUsuario.recuperarUsuario(sessionUsuario);
				daoUsuario.salvarOcorrencia(ocorrencia);
				RequestDispatcher view = request
						.getRequestDispatcher("/pages/usuario.jsp");
				request.setAttribute("usuarios", daoUsuario.listar());
				view.forward(request, response);

			} else if (acao != null && acao.equalsIgnoreCase("editar")
					&& user != null) {
				Usuario usuario = daoUsuario.consultar(user);
				RequestDispatcher view = request
						.getRequestDispatcher("/pages/usuario.jsp");
				request.setAttribute("user", usuario);
				view.forward(request, response);

			} else if (acao != null && acao.equalsIgnoreCase("ocorrencia")) {
				RequestDispatcher view = request
						.getRequestDispatcher("/pages/ocorrencia.jsp");
				request.setAttribute("ocorrencias",
						daoUsuario.listarOcorrencia(user));
				view.forward(request, response);
				
			}

		} catch (Exception e) {
			e.printStackTrace();

		}
	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		String acao = ("SalvarUsuario");
		String usuarioSessao = request.getParameter("usuarioSessao");
		sessionUsuario = usuarioSessao;
	
		boolean podeInserir = true;
		String msg = null;

		String id = request.getParameter("id");
		String login = request.getParameter("login");
		String nome = request.getParameter("nome");
		String senha = request.getParameter("senha");

		Usuario usuario = new Usuario();
		usuario.setId(!id.isEmpty() ? Long.parseLong(id) : null);
		usuario.setLogin(login);
		usuario.setNome(nome);
		usuario.setSenha(senha);

		Ocorrencia ocorrencia = new Ocorrencia();

		try {
			if (id == null || id.isEmpty() && podeInserir) {
				daoUsuario.salvar(usuario);
				//Mensagem salvo com sucesso
				request.setAttribute("msg",  "Usuário salvo com Sucesso!");
				//Tipo de mensagem
				request.setAttribute("tipo", "success");
				daoUsuario.acaoPagina(acao);
				daoUsuario.recuperarID();
				daoUsuario.recuperarNome();
				daoUsuario.recuperarUsuario(usuarioSessao);
				daoUsuario.salvarOcorrencia(ocorrencia);
				RequestDispatcher view = request
						.getRequestDispatcher("/pages/usuario.jsp");
				request.setAttribute("usuarios", daoUsuario.listar());
				view.forward(request, response);

			}
			if (id != null && !id.isEmpty()) {
				daoUsuario.atualizar(usuario);
				request.setAttribute("msg",  "Usuário editado com Sucesso!");
				//Tipo de mensagem
				request.setAttribute("tipo", "success");
				daoUsuario.acaoPagina(acaoGet);
				daoUsuario.recuperarID();
				daoUsuario.recuperarNome();
				daoUsuario.recuperarUsuario(usuarioSessao);
				daoUsuario.salvarOcorrencia(ocorrencia);
				RequestDispatcher view = request
						.getRequestDispatcher("/pages/usuario.jsp");
				request.setAttribute("usuarios", daoUsuario.listar());
				view.forward(request, response);

			}else{
		       
				RequestDispatcher view = request
						.getRequestDispatcher("/pages/usuario.jsp");
				request.setAttribute("usuarios", daoUsuario.listar());

			}

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Na autenticação vc faz: session.setAttribute("login", usuario);
E no filtro vc usa: Usuario usuario = (Usuario) session.getAttribute("usuario");

Vc deve utilizar o mesmo nome de atributo para armazenar o usuário.

//