Sessão

Eu não tenho muita experiencia em Web. Eu criei uma sessão na minha servlet mas eu não sei como eu faria para validar essa sessão no client. Eu deixei assim na servlet:

private static String login; private static String senha; private static HttpSession session; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { login = request.getParameter("login"); senha = request.getParameter("senha"); Login log = new Login(); if (login == null) login = ""; if (senha == null) senha = ""; try { if (log.loga(login, senha)) { session.setAttribute(login, login); response.sendRedirect("Index.jsp"); } else response.sendRedirect("SenhaIncorreta.jsp"); } catch (SQLException e) { } }

A classe Login faz uma consulta no banco de dados através do metodo loga, que retorna true ou false, se true ele cria a sessão e redireciona para a pagina Index.jsp caso contrário para a página SenhaIncorreta.jsp.

Antes desse código eu estava usando apenas cookies para controlar as sessões mas me disseram que isso não é uma boa ideia (apesar de funcionar). Como eu faria para colocar na minha página JSP para válidar as sessões, afim de evitar que o usuário possa pular a página de login e simplesmente ir mexendo nas partes que requerem uma sessão.

Eu usava os cookies também como parâmetro para fazer consultas no banco de dados.

Então eu preciso de um código que substitua os cookies sem que seja necessário fazer muitas modificações em outras partes do programa.

a maneira mais simples de você fazer isso é utilizando Filtros.

Procure por Filter em Servlets.

Você poderia criar (caso já não tenha) um filtro que irá capturar todas as requisições.
Nesse post tem um exemplo que talvez te ajude: Autenticação de Usuários (Filter/Servlet).

Opa, obrigado pela resposta, vou dar uma olhada no link que o jakefrog postou.

Acho que você poderia fazer um scriplet nas páginas pegando a session pelo getAttribute, aí você faria uma comparação.
Acho que assim seria mais simples.

[quote=williamdasflores]Acho que você poderia fazer um scriplet nas páginas pegando a session pelo getAttribute, aí você faria uma comparação.
Acho que assim seria mais simples.[/quote]

Hmmm poderia me dar um exemplo?

Cara eu fiz isso só que não to lembrado agora, mas vou tentar dar um exemplo.
Acho que tem que adicionar isso na Servlet

try {  
            if (log.loga(login, senha)) {  
                session = request.getSession(true);
                session.setAttribute("login", login);  
                response.sendRedirect("Index.jsp");
             }

Na sua index.jsp vc cria um scriplet

<html>
<head>
     <title> TESTE </title>
</head>
<body>
<% 
   if(request.getAttribute("login") == null){
        RequestDispatcher rd = request.getRequestDispatcher("ErroLogin.jsp");
         rd.forward(request, response);
%>
.....
.....
....
</body>

Cara não to lembrado exatamente se é assim, mas assim que eu chegar em casa eu vejo, se estiver errado eu posto certinho. :smiley:

A melhor saida é fazer um filtro de login. Pois a cada chamada de pagina ele verifica se o cara ta logado e barra a entrada no sistema. Faz um filtro e registra ele no web.xml
Se voce nao quiser fazer o filtro cria uma pagina e para nao repetir o codigo em todas voce vai dando include dela nas outras

na pagina jsp voce coloca:

<% if(session.getAttribute("login)==null) {
       response.sendRedirect("login.jsp");
      }
%>

Então cara, acabei de ver aqui.
A Servlet ta ok, agora na jsp eu fiz assim

<title>Tutoria</title>
<%
	if(session.getAttribute("usuario") == null){
		RequestDispatcher rd = request.getRequestDispatcher("ErroLogar.jsp");
		rd.forward(request, response);
	}
%>
</head>
<body>
	<jsp:useBean id="usuario" scope = "session" class = "br.com.bean.Login"/>
	<%
		session.setAttribute("usuario", usuario);
	%>
...
...
...

Ai é só vc trocar os RequestDispatcher para os sendRedirect.