Re:autenticação de centenas de usuários no bd? é for?

Dá uma olhada em SQL e Banco de Dados.

Vc faria um select no banco com SQL.

Com Hibernate vc tentaria carregar o objeto user através das propriedades username e password.

Com o Hibernate você poderia fazer simplesmente isso:

Criteria c = getSession().createCriteria(Usuario.class);
c.add(Expression.eq("login", login));
Usuario usr = (Usuario) c.uniqueResult();

if (usr.validaSenha(senha))
     return true;

onde validaSenha(senha) seria um método em Usuario que retorna true se a senha for igual à passada como argumento e false caso contrário. Claro que a sua aplicação deveria ter um minimo de infraestrutura (DAOs, ActiveRecord, ou o que você achar melhor) para facilitar esse trabalho.

Usuario usr = usuarioDAO.findByLogin(login);
if (usr.validaSenha(senha))
    return true;

Sobre a query, você faz o mapeamento de objetos no hibernate, e não de queries. O mais próximo do mapeamento de uma query seria fazê-la usando a linguagem de query do hibernate, mas pelo que eu entendi do que você disse, você está confundindo as coisas.

Para quê? Entenda o seguinte: esse ‘user’ que viria do hibernate não seria uma String com o nome do usuário, seria um objeto usuário contendo os dados que estão no banco de dados (incluindo login e senha). Se você faz uma busca pelo usuário que possue o login ‘x’ usando o hibernate, ele vai lhe retornar o objeto usuário com os dados do usuário ‘x’ que estão no banco de dados, entendeu? Assim, é necessário apenas verificar se as senhas são iguais. Além disso, se fosse o caso, você não pode verificar se o login é igual OU a senha é igual, terá que verificar se os dois são iguais, então o certo ai seria um &&, e não um ||.

eu tava vendo um exemplo de autenticação (com o mentawai), o código do método é esse:

[code]public String execute() throws Exception {
String user = input.getStringValue(“username”);
String pass = input.getStringValue(“password”);

	if (user == null || user.trim().equals("")) {
		return ERROR;
	}
	
	if (pass == null || pass.trim().equals("")) {
		return ERROR;
	}
	
	if (!user.equals("saoj") || !pass.equals("abc123")) {
		return ERROR;
	}
	
	setUserSession(user);
	
	return SUCCESS;
}[/code]

aqui, ele faz o que eu peço pra entrar. mas e quando eu tenho centenas de usuário gravados num banco de dados?

vejamos se eu estou certo: com hibernate, eu ia acessar o banco e a tabela, e com uma estrutura for, eu ia verificando até o fim da tabela se o user existia, se sim prosseguia pra estrutura for da pass, até o fim. isso tá certo? é assim que se faz uma autenticação com centenas de usuários em um banco?

valeus.

como em

SELECT tb FROM db

WHERE user = “saoj”

é isso? só mapear com o hibernate depois não é?

ah sim. eu quis dizer que seria mais ou menos como fazer a partir de comandos sql. normalmente com select. mapear os objetos da classe. o select foi só um exemplo. mas vamos ver se caiu minha ficha.

eu não poderia fazer isso?

if (user.equals(usuario) || pass.equals(senha)
return true;

onde usuario e senha são argumentos do método e depois mapear no hibernate? não dá?