HttpSession esta bem empregado nesse caso?

1 resposta
faeldix

Pessoal eu foco muito nessa parte de seguranca e estou aprendendo a trabalhar com JSP e Servlets.. entao vamos la

segue o meu index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Sistema de Login</title>
</head>
<body>

	<div id="content" style="width: 300px; margin:0 auto;">
	
		<h1>Sistema de Login</h1>
		<form action="Controller" method="post">
			<table style="border: 2px solid #cccc">
				<tr>
					<td>Login</td>
					<td><input type="text" name="login"/></td>
					
				</tr>
				<tr>
					<td>Senha</td>
					<td><input type="password" name="senha"/></td>
				</tr>
				<tr>
					<td><input type="reset" /></td>
					<td><input type="submit" value="Logar"/></td>
				</tr>
			</table>
		</form>
	</div>
	<span>${mensagem}</span>
</body>
</html>

segue agora o meu Servlet

package br.com.dawj.controle;

import java.io.IOException;

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

import sun.rmi.runtime.Log;

public class Controller extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public Controller() {
        super();
    }

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Logavel log = new Logavel(request.getParameter("login"),request.getParameter("senha"));
		
		if (log.getLogin().equals("login") && log.getSenha().equals("senha")){
			HttpSession session = request.getSession(true);
			session.setAttribute("usuario", log);
			RequestDispatcher view = request.getRequestDispatcher("logado.jsp");
			view.forward(request, response);
			System.out.println("primeiro");
		} else {
			request.setAttribute("mensagem", "Usuario ou Senha Invalidos");
			RequestDispatcher view = request.getRequestDispatcher("index.jsp");
			view.forward(request, response);
			System.out.println("segundo");
		}
		
	}

}

e a minha pagina logado.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
	<jsp:useBean id="usuario" class="br.com.dawj.controle.Logavel" scope="session">
	</jsp:useBean>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Ola ${usuario.login}</title>
</head>
<body>
	<p>Olá você esta logado como ${usuario.login}</p>
</body>
</html>

1 Resposta

gomesrod

Sim, está indo bem até agora :slight_smile:

Vou fazer algumas observações:

  1. Um detalhe muito importante: você precisa implementar também um Filter que verifique a cada requisição se o usuário está logado. Caso contrário, é só digitar direto a url da página logado.jsp que vou direto para lá sem login.

  2. Não utilize a tag jsp:useBean nesse caso (aliás, ao usar MVC dificilmente precisaremos dessa tag), pois ela vai criar o objeto caso não exista, e não é isso que queremos - o objeto “usuário” só pode ser criado durante o login.
    A expressão ${usuario.login} consegue encontrar o objeto sozinha, pois o container sempre vai procurar em cada escopo, inclusive na sessão; mas se quiser deixar o código mais claro utilize ${sessionScope.usuario.login}

  3. uma dica: Experimente também utilizar autenticação gerenciada pelo servidor (jaas)

Criado 22 de fevereiro de 2012
Ultima resposta 23 de fev. de 2012
Respostas 1
Participantes 2