Login

4 respostas
5

oi, tava tentando fazer um login mas nao axo maniera de o conseguir… será que ninguem tem ja um exemplo feito pra que eu possa ver, para eu por na minha aplicação… ah estou a trabalhar com o netbeans e a base de dados e a mysql…

4 Respostas

WashingtonBotelho

Dektop ou Web?
Você tem dúvida em qual parte?
Você esta fazendo seu sistema em camadas? Se sim fale um pouco que eu te ajudo.

5

oi…

a aplicação será web, agora não tenho nenhuma ideia de como fazer, se você tiver algum exemplo que eu posso ver, sei lá algum projecto k voce tenha feito um login em alguma aplicaçao

5

pessoal ninguem tem um exemplo de login que eu possa ver??? um login local

WashingtonBotelho

Olá 56630,

me desculpe a demora, mas estou meio apertado como tempo.
Bem vamos lá, vou tentar resumir aqui baseado em JSP.

Você terá de passar por três camadas, eu costumo usar mais uma que é o Facade, mas coloquei o Servlet que seria meu Facade como Controle para resumir.
Veja as camadas:

Passo os dados a partir do index.jsp -> Pego os dados com o Servlet ControleApl -> Chamo o UsuarioDao para pegar as informações do banco.

Aqui você irá passar os dados com os nomes do campo de "usuario" e "senha"
<%@ page contentType="text/html" pageEncoding="ISO-8859-1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<c:if test="${sessionScope.usuario != null}"> // Se o usuário já estiver na sessão já jogo ele pra dentro do site.
  <jsp:forward page="home.jsp"/>
</c:if>

<html>
  <head/>
  <body>
    <form action="ControleApl?cmd=autenticar" method="post">
    <input type="text" name="usuario"/>
    <input type="password" name="senha"/>
    <input type="submit" value="Logar"/>
    </form>  
  </body>
Para a chamada da action você terá de mapear seu Servlet no web.xml assim:
<servlet>
  <servlet-name>ControleApl</servlet-name>
  <servlet-class>br.com.SEUDOMINIO.controller.ControleApl</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>ControleApl</servlet-name>
  <url-pattern>/ControleApl</url-pattern>
</servlet-mapping>
Aqui você pega os dados do request e faz uma consulta ao banco e coloca o usuário retornado na sessão. Se o usuário for diferente de null coloco ele na sessão, caso contrário redireciono para o index novamente junto com uma mensagem de erro:
package br.com.SEUDOMINIO.controller;

import java.io.IOException;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class PessoalFacade extends HttpServlet {

  private String cmd;
  private String url;
  private UsuarioDao usuarioDao = new UsuarioDao();

  @Override
  public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
    cmd = request.getParameter("cmd");

    if (cmd.equalsIgnoreCase("auth")) {
      try {
        url = "home";

        Usuario usuario = usuarioDao.autenticar(request.getParameter("usuario"), request.getParameter("senha"));

        if (usuario != null) {
          request.getSession(true).setAttribute("usuario", usuario);
        } else {
          request.setAttribute("resultado", "Usuário ou senha inválida!"); // Como não existe sessão, redireciono com o resultado no request.
          request.getRequestDispatcher("/index.jsp").forward(request, response);
        }

        Conexao.commit(true);
      } catch (SQLException ex) {
        Conexao.commit(false);
        ex.printStackTrace();
        request.setAttribute("resultado", "Ocorreu um erro na atualização de sua visita!");
        request.getRequestDispatcher("index.jsp").forward(request, response);
      }
    }

    if (request.getSession().getAttribute("usuario") != null) {
      response.sendRedirect(url + ".jsp");
    }
  }
}
Aqui faço a consulta ao banco pelo usuário e senha passados:
public Usuario autenticar(String user, String senha) throws SQLException {
    try {
      ps = conn.prepareStatement("SELECT * FROM usuario WHERE binary l.usuario = ? AND binary l.senha = ?"); // binary == Case Sensitive
      ps.setString(1, user);
      ps.setString(2, senha);

      rs = ps.executeQuery();

      Usuario usuario = null;

      if (rs.next()) {
        usuario = new Usuario(rs.getInt("codUsuario"), rs.getString("usuario"), rs.getString("senha"));
      }

      return usuario;
    } catch (SQLException e) {
      throw e;
    } finally {
      Conexao.release(ps, rs);
    }
  }
E por último nas suas páginas você terá de colocar no início o código:
<c:if test="${sessionScope.usuario == null}">
  <jsp:forward page="index.html"/>
</c:if>

Assim se o usuário tentar acessar sua página direto e não tiver o usuário na sessão ele será redirecionado novamente para o index.

Existe maneiras melhores de controlar acesso atravéz de filters, porém este é um exemplo simples e funcional.

Resumindo é isto amigo, qualquer dúvida só postar. :)
Abraço.

Criado 23 de maio de 2009
Ultima resposta 27 de mai. de 2009
Respostas 4
Participantes 2