Boa tarde,
Estou com algumas dúvidas e gostaria das dicas de vocês para fazer um bom servlet para autenticar meus usuários no sistema.
Primeiro alguns pré-requisitos
- Precisa ser em MVC
- O sistema tem telas especificas para Administradores e Usuários, ou seja, conforme sua permissão ele abre as paginas X ou Y
- Os usuários, senhas e nível de acesso (Administrador/Usuário) já estão cadastrados no banco de dados.
O que eu já fiz:
- Criei a JSP, onde o forma chama o Servlet (doPost)
- Criei uma classe chamada Login que gera um objeto com usuario e senha
- Criei uma classe pra conexão com o banco de dados (MySQL - funcionando)
- Criei a classe DAO que faz um select no banco e pega as informacoes do usuário digitado
- Criei o servlet que instancia o objeto Login e passa esse objeto para a classe DAO que pesquisa no banco.
Minha dúvida é…
Preciso que a classe DAO retorne pro servlet se o usuário é ou não válido e também preciso dizer se esse usuário é ou não administrador do sistema.
Depois disso preciso criar uma session pra guardar a informação do usuário e o nivel de permissão, que vão ser usados pra consultar mais tarde nas outras telas.
Como devo proceder?
JSP
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>SGC - Sistema de Gerenciamento Condominial</title>
<style rel="stylesheet" type="text/css" />
html, body { padding: 0; margin: 0;}
p {padding: 0; margin: 0;}
#geral {width: 100%; height: 100%;}
#fundo {width: 100%; height: 200px; background-image: url(fundologin.png); position: absolute; top: 50%; margin-top: -100px;}
#logoform {width: 455px; height: 200px; margin: 0 auto;}
#logo {float:left; margin-top: 35px;}
#form {float:right; margin-top: 40px; font-family: Tahoma; font-size: 10px;}
#campo {border: 1px solid #CCC; height: 20px; width: 150px; margin-bottom: 5px; }
#botao {height: 25px; width: 150px; background: #FFF; margin-top: 8px; font-family:Tahoma;}
</style>
</head>
<body>
<div id="geral">
<div id="fundo">
<div id="logoform">
<img id="logo" src="logo248x130.png"/>
<form id="form" method="post" action="Login">
<p>Usuário</p>
<p><input id="campo" name="usuario" type="text" /></p>
<p>Senha</p>
<p><input id="campo" name="senha" type="password" /></p>
<p><input id="botao" name="entrar" type="submit" value="ENTRAR"/></p>
</form>
</div>
</div>
</div>
</body>
</html>
Classe pra instanciar os Objetos de Login
package Object;
public class LoginObject {
private String usuario;
private String senha;
public String getUsuario() {
return usuario;
}
public void setUsuario(String usuario) {
this.usuario = usuario;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
}
DAO que deveria retornar alguma coisa, por enquanto só ta fazendo uns println
package DAO;
import Conexao.Conexao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import Object.LoginObject;
/**
*
* @author murilo
*/
public class LoginDAO extends Conexao{
public static void Login(LoginObject login) throws SQLException, ClassNotFoundException {
String sql = "SELECT * FROM condomino WHERE usuario=? AND senha=?";
Connection con = GetConexao();
PreparedStatement psmt = con.prepareStatement(sql);
psmt.setString(1, login.getUsuario());
psmt.setString(2, login.getSenha());
ResultSet rs = psmt.executeQuery();
if(rs.next()){
System.out.println(rs.getString("usuario"));
System.out.println(rs.getString("senha"));
System.out.println(rs.getString("administrador"));
} else {
System.out.println("Nenhum usuario!");
}
psmt.close();
rs.close();
con.close();
}
}
Servlet que deveria receber o retorno da DAO e criar a session.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Servlet;
import java.io.IOException;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
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 Object.LoginObject;
import DAO.LoginDAO;
/**
*
* @author murilo
*/
public class LoginServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, SQLException, ClassNotFoundException {
response.setContentType("text/html;charset=UTF-8");
// joga usuario e senha nas strings
String usuario = request.getParameter("usuario");
String senha = request.getParameter("senha");
// instancia o objeto login que vai ser usado na DAO
LoginObject login = new LoginObject();
login.setUsuario(usuario);
login.setSenha(senha);
// define a pagina de retorno como null
String pagina = null;
// chama a dao que verifica o login no banco e retorna se é administrador ou não
LoginDAO.Login(login);
response.setContentType("text/html;charset=UTF-8");
if(usuario.equals("Admin") && senha.equals("teste")) {
HttpSession sessao = request.getSession();
sessao.setAttribute("login", usuario);
sessao.setAttribute("permissao", "Admintrador");
pagina = "Administrador/home.jsp";
response.sendRedirect(pagina);
}
else if(usuario.equals("Usuario") && senha.equals("teste")) {
HttpSession sessao = request.getSession();
sessao.setAttribute("login", usuario);
sessao.setAttribute("permissao", "Usuario");
pagina = "Usuario/home.jsp";
response.sendRedirect(pagina);
}
else {
pagina = "index.jsp";
response.sendRedirect(pagina);
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
processRequest(request, response);
} catch (SQLException ex) {
Logger.getLogger(LoginServlet.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(LoginServlet.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
processRequest(request, response);
} catch (SQLException ex) {
Logger.getLogger(LoginServlet.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(LoginServlet.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public String getServletInfo() {
return "Short description";
}
}
Obrigado quem puder me dar umas dicas ae! =)