danilopelegrino:
Exemplo com JSP e Servlet + AuthFilter:
Servlet:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, SQLException {
response.setContentType("text/html;charset=UTF-8");
Users user = new Users();
UserControl ctl = new UserControl();
user.setLogin(request.getParameter("user"));
user.setPassWord(request.getParameter("password"));
if(ctl.verifUser(user)) {
request.getSession().setAttribute("isLogged", new Boolean(true));
response.sendRedirect("principal.jsp");
} else {
response.sendRedirect("errorLogin.jsp");
}
}
AuthFilter:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
Object logged = req.getSession().getAttribute("isLogged");
String url = req.getRequestURL().toString();
if(logged == null && !url.contains("errorLogin.jsp") && !url.contains("index.jsp") && !url.contains("VerifUserServlet") && !url.contains("images")) {
res.sendRedirect("index.jsp");
return;
}
chain.doFilter(request, response);
}
obs: Este exemplo mostra como manter um user logado até que a sessao expire. Basta você adaptar a logica de controle de acesso.
Olá danilo, td bem??
Cara, achei muito interessante tua implentação, mas me diz uma coisa: na minha aplicação web, uso o hibernate e uso o banco postgres. Eu tenho uma classe HibernateSessionFilter que gerencia as sessões. tenho uma classe LoginDAO que faz a conexao para verificacao de usuario e senha, e tenho uma classe loginHandler para gerenciar as regras de acesso. Qual seria a forma mais facil de implementar essa tua lógica nas minhas classes?? Desculpa se a pergunta parecer besta, é que eu sou iniciante em java e tem sido dificil resolver essa pendencia.
Segue minhas classes:
HibernateSessionFilter:
package br.gov.rr.setrabes.util;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class HibernateSessionFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain fc)
throws IOException, ServletException {
HibernateUtil.openSession();
try {
HibernateUtil.currentSession().beginTransaction();
fc.doFilter(req, res);
HibernateUtil.currentSession().getTransaction().commit();
} catch (Exception e) {
throw new ServletException(e);
} finally {
HibernateUtil.closeCurrentSession();
}
}
public void init(FilterConfig c) {
}
public void destroy() {
}
}
Minha classe LoginDAO:
package br.gov.rr.setrabes.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class LoginDAO {
public LoginDAO() {
}
public boolean getCheca(String login, String senha, String nivel) {
boolean ok = false;
try {
Class.forName("org.postgresql.Driver").newInstance();
System.out.println("DRIVER CARREGADO");
} catch (Exception e) {
System.out.println("driver nao carregado");
}
try {
String sql = "SELECT * from Usuario where login=? AND senha=? AND nivel=?";
// comentei para usar o conexao.class
Connection c = DriverManager.getConnection(
"jdbc:postgresql://localhost:5432/mogmo", "postgres",
"postgres");
PreparedStatement pstm = c.prepareStatement(sql);
pstm.setString(1, login);
pstm.setString(2, senha);
pstm.setString(3, nivel);
ResultSet rs = pstm.executeQuery();
System.out.println("CONEXAO ESTABELECIDA");
if (rs.next() && rs.getString("login") != null
&& rs.getString("login").equals(login)
&& rs.getString("senha").equals(senha)
&& rs.getString("nivel").equals(nivel)) {
ok = true;
System.out.println("Usuario carregado");
} else {
}
rs.close();
c.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
return ok;
}
}
A Classe LoginHandler:
package br.gov.rr.setrabes.handler;
import java.util.List;
import org.hibernate.Session;
import br.gov.rr.setrabes.dao.Dao;
import br.gov.rr.setrabes.dao.LoginDAO;
import br.gov.rr.setrabes.estrutura.Login;
import br.gov.rr.setrabes.estrutura.Usuario;
import br.gov.rr.setrabes.util.HibernateUtil;
public class LoginHandler {
private LoginDAO loginDAO = new LoginDAO();
/** Creates a new instance of ControleLogin */
public LoginHandler() {
}
private Login LO = new Login();
//
public Login getLO() {
return LO;
}
public void setLO(Login LO) {
this.LO = LO;
}
public String login() {
System.out.println("login= " + LO.getLogin());
System.out.println("senha= " + LO.getSenha());
// //poe booleano na sessao
// HttpSession session = session.setAttribute();
boolean ok = loginDAO.getCheca(LO.getLogin(), LO.getSenha(), "1");
if (ok == true) {
System.out.println("USUARIO LOGADO COM SUCESSO");
return "ok";
}
boolean admin = loginDAO.getCheca(LO.getLogin(), LO.getSenha(), "2");
if (admin == true) {
System.out.println("ADMIN LOGADO COM SUCESSO");
return "admin";
} else
System.out.println("ACESSO INVÁLIDO");
return "erro";
}
public List<Usuario> getUsuarios() {
System.out.println("carregando usuarios ...");
Session session = HibernateUtil.currentSession();
Dao<Usuario> dao = new Dao<Usuario>(session, Usuario.class);
return dao.list();
}
}