Session

8 respostas
R

Ola galera!!..

To criando sessão na minha aplicação web, porem quando o usuario faz um logout e tenta acessar uma pagina restrita diretamente no browser o sistema aceita.

Segue logo abaixo o codigo da sessao, o que posso esta fazendo errado?

public class ConfUsua {
	
	HttpSession sessao;
	Usuario usuario = null;
	
		
	public void Sessao(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ 
		
		sessao = request.getSession(false);
		
		usuario = (Usuario) sessao.getAttribute("usuario"); 
				
		if(sessao.getAttribute("id") != sessao.getId())
		{		
			response.sendRedirect("login.html");
		}					
	}
	
	public void LogoutSessao(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		
		Sessao(request, response);
		sessao.setAttribute("id", null);
		sessao.setAttribute("listaMenu", null);
		sessao.setAttribute("banner", null);
		sessao.removeAttribute("id");
		sessao.removeAttribute("usuario");
		sessao.invalidate();
		sessao = null;
		
		response.sendRedirect("login.html");
		
	}
	
	public HttpSession RetornaSessao(){
	
		return sessao;
	}
	
	public Usuario getUsuario(){
		return usuario;
	}
}

8 Respostas

C

Rick,

Qual é seu método de login? É esse Sessao(HttpServletRequest request, HttpServletResponse response) ? Se não for mostre aí pra gente.

Vc está usando algum listener para verificar as chamadas das páginas restritas e verificar se o usuário está logado? Se estiver mostre pra gente como está fazendo.

@braços,
Cleiton

R

quando usuario loga esse é o metodo de um servlet que cria a sessão

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
				
		Usuario usuario = new Usuario();
		usuario.setCd_usuario(request.getParameter("cd_usuario"));
		usuario.setCd_senha(request.getParameter("cd_senha"));
						
		UsuarioDAO usuarioDAO = new UsuarioDAO();
		usuario = usuarioDAO.Select(usuario);
					
		if(usuario == null)
			response.sendRedirect("ErroUsuario.html");
		
		else
		{	
			HttpSession sessao = request.getSession(true);
			sessao.setAttribute("usuario", usuario);
			sessao.setAttribute("id", sessao.getId());
			
			ConfUsua confUsua = new ConfUsua();
			sessao.setAttribute("listaMenu", confUsua.getMenu(usuario));
			sessao.setAttribute("banner", confUsua.getBanner(usuario));
			
			RequestDispatcher dispatcher = request.getRequestDispatcher("perfil_usuario.jsp");
			dispatcher.forward(request, response);
		}		
	}

Nas paginas eu instancio a classe e chamo o metodo

<jsp:useBean id="control"  class="br.pronto.atendimento.servlet.Control_BuscPac"/>

<%control.Sessao(request, response);%>
R

Eu também queria saber como fazer depois que o cara fazer o logout no sistema, não deixar ele voltar na pagina anterior, ou seja, dar um aviso ou sei la apagar tds as paginas visitadas no meu sistema.

Tem como fazer isso?

C

“rickab7”:
Eu também queria saber como fazer depois que o cara fazer o logout no sistema, não deixar ele voltar na pagina anterior, ou seja, dar um aviso ou sei la apagar tds as paginas visitadas no meu sistema.

Tem como fazer isso?

Faltou esse método Sessao da classe Control_BuscPac

<jsp:useBean id="control"  class="br.pronto.atendimento.servlet.Control_BuscPac"/>

<%control.Sessao(request, response);%>

@braços,
Cleiton

R

Segue a classe

package br.pronto.atendimento.servlet;

import java.io.IOException;
import java.util.Collection;

import javax.servlet.ServletException;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import br.pronto.atendimento.ConfUsua;
import br.pronto.atendimento.bean.Paciente;
import br.pronto.atendimento.dao.PacienteDAO;

/**
 * Servlet implementation class for Servlet: Control_BuscPac
 *
 */
 public class Control_BuscPac extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
   static final long serialVersionUID = 1L;
   
    /* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#HttpServlet()
	 */
	public Control_BuscPac() {
		super();
	}   	
	
	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}  	
	
	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		Paciente paciente = new Paciente();
		PacienteDAO pacienteDAO = new PacienteDAO();
		Collection<Paciente> lista_paciente = null;
		RequestDispatcher dispatcher = null;
		
		if(request.getParameter("nm_paciente") != null)
		{
			paciente.setNome(request.getParameter("nm_paciente"));
			lista_paciente = pacienteDAO.SelectAll(paciente);
			request.setAttribute("lista_paciente", lista_paciente);
			
			dispatcher = request.getRequestDispatcher("buscar_paciente.jsp");
			dispatcher.forward(request, response);
		}
					
		else if(request.getParameter("cd_paciente") != null)
		{
			paciente.setCd_paciente(Integer.parseInt(request.getParameter("cd_paciente")));
			paciente = pacienteDAO.Select(paciente);
			
			request.setAttribute("paciente", paciente);
			
			Control_CadAte control = new Control_CadAte();
			control.doGet(request, response);			
		}		
		
	}
	
	public void Sessao(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		ConfUsua confUsua = new ConfUsua();
		confUsua.Sessao(request, response);
	}
}
C

Bom o fato de aceitar acessar sem logar é por causa de falha nesta sua comparação.

if(sessao.getAttribute("id") != sessao.getId())
      {      
         response.sendRedirect("login. html");
      }

Vc já testou os dados que são retornados em várias situações para sessao.getAttribute(“id”) e sessao.getId() para ver se realmente ela não vai falhar? Tipo fazer um assert disso para testar.

@braços,
Cleiton

C

Rick,

O Fábio Zoroastro indicou em outro post este link na DEVMEDIA do Jair Elton Batista de Souza, com um exemplo para autenticação e autorização, acho que pode te ajudar.

Dê uma olhadinha:

http://www.devmedia.com.br/visualizacomponente.aspx?comp=1720&site=6

@braços,
Cleiton

R

Ola, quero agradecer a ajuda que estou tendo neste momento.

Quando ao redirecionamento para a pagina e esta com espaço entre o ponto e o html não é problema, pois quem colocou o espaço foi o html do portal java.

O meu real problema é como fazer com que o usuario ao fazer o logout não consiga dar um voltar na pagina.

Será que vc sabe como fazer isso?

Valeu de qualquer geito

Criado 30 de outubro de 2007
Ultima resposta 31 de out. de 2007
Respostas 8
Participantes 2