Implementação de Regra de Validação

2 respostas
Kleber-rr

Olá pessoal. Mais uma vez eu venho a vcs procurar ajuda na implementação de regra de validação, de forma a bloquear o acesso à minhas jsp's via URL.
Bom, eu estive tentando implementar um PhaserListener, e me deparei que o meu código está muito feio (acho normal pra quem está aprendendo agora...). Mas vamos lá.
Estou tentando criar um sistema em java, usando um banco em postgresql e hibernate. Estive pensando que eu poderia criar uma regra de restrição de acesso ao banco caso o usuário não estivesse logado e tentasse acessar as páginas do sistema via URL.
Minhas classes de regra de conexão são essas:

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;

import org.hibernate.Session;

public class LoginDAO {
	String login;
	String senha;
	String nivel;
	String status;

	public LoginDAO() {
	}

	public LoginDAO(Session currentSession) {

	}

	public boolean getCheca(String login, String senha, String nivel,
			String status) {

		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=?";


			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");

//podem perceber que abaixo estou tentando fazer uma validação de acesso, que infelizmente não funcionou...
			if (!rs.getString("login").isEmpty()
					&& rs.getString("login") != null)
				if (rs.next() && !rs.getString("login").isEmpty()
						&& 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 {
					ok = false;
					rs.close();
					c.close();
				}

		} catch (SQLException ex) {
			ex.printStackTrace();
			status = "erro sql:" + ex.getMessage();
		}
		return ok;

	}

	public String setLogin() {

		return login;

	}

	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String getNivel() {
		return nivel;
	}

	public void setNivel(String nivel) {
		this.nivel = nivel;
	}

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}
}
Além dessa classe, estou usando uma LoginHandler que está assim:
package br.gov.rr.setrabes.handler;

import java.security.NoSuchAlgorithmException;
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();
	private Login LO = new Login();
	private Boolean logado = new Boolean(false);

	public LoginHandler() {
	}

	public Boolean isLogado() {
		return this.logado;
	}

	public void setLogado(Boolean logado) {
		this.logado = logado;
	}

	public Login getLO() {
		return LO;
	}

	public void setLO(Login LO) {
		this.LO = LO;
	}

	public String login() throws NoSuchAlgorithmException {
		System.out.println("login= " + LO.getLogin());
		System.out.println("senha= " + LO.getSenha());

//aqui abaixo, estou tentando implementar uma regra de acessos bem simples, baseada en usuario, senha e nível de acessos.
		boolean ok = loginDAO.getCheca(LO.getLogin(), LO.getSenha(), "1",
				"logado");
		if (ok == true) {
			System.out.println("USUARIO LOGADO COM SUCESSO");
			return "ok";

		}
		boolean admin = loginDAO.getCheca(LO.getLogin(), LO.getSenha(), "2",
				"logado");
		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();
	}

}

E ae pessoal, o que vcs acham?? Eu posso utilizar todas as regras numa classe só? Como eu posso de forma mais fácil implementar uma validação de usuário na sessão, de forma a proibir o acesso às jsp's via URL?

Agradeço a colaboração de todos.

2 Respostas

marcosharbs

Filter?

Kleber-rr

Olá marcosharbs, td bem?

Realmente, a melhor maneira de fazer isso é com filter. O problema é que estou tendo dificuldades em implementar um filter nessas classes. Tem algum modelo pra me mostrar, para que eu tenha uma base?

Agradeço.

Criado 22 de setembro de 2009
Ultima resposta 22 de set. de 2009
Respostas 2
Participantes 2