Pessoal, estou fazendo uma validação no banco, estou fazendo assim, mas não funcionou…
O usuario preenche o formulario com login e senha, envia para o servlet que pega os dois valores:
String login = request.getParameter("login");
String senha = request.getParameter("senha");
Depois executo o método:
[code]
try {
if(uDAO.validarUsuario(login,senha) == true){
HttpSession session = request.getSession();
session.setAttribute("login", login);
response.sendRedirect("exibir.jsp");
}
else{
response.sendRedirect("login.jsp");
}
} catch (SQLException e) {
e.printStackTrace();
}[/code]
Código do método:
public boolean validarUsuario(String login, String senha) throws SQLException {
Connection con = conexao.getConnection();
String sql = "SELECT login,senha from usuario where login ='"+login+"' and senha ='"+senha+"';";
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(sql);
if(rs != null){
return true;
}
return false;
}
O método tá certo? Obrigado!
use
if(rs.next()){
return true;
}
outra coisa, seu codigo tem uma falha de seguranca, use PreparedStatement ao inves de Statement.
[]'s
[quote=mauricioadl]use
if(rs.next()){
return true;
}
outra coisa, seu codigo tem uma falha de seguranca, use PreparedStatement ao inves de Statement.
[]'s[/quote]
Ainda continua indo para a página exibir mesmo o usuário não existindo 
Como eu usaria o PreparedStatement em um select?
Olá colegas, será que nesse caso seria interessante ele já aproveitar essa autenticação e já adicionar o objeto desse usuário à sessão? Ao invés de somente o login? :roll:
String senha = "senhaSuperSecreta";
String nome = "mauricioadl";
ps = con.prepareStatement("SELECT nome, senha FROM usuarios WHERE nome = ? AND senha = ?");
ps.setString(1, nome);
ps.setString(2, senha);
ResultSet rs = ps.executeQuery();
return rs.next() ? true : false;
Peguei sua dica e fiz assim:
[code]
if(request.getParameter(“acao”).equals(“validar”)){
try {
if(uDAO.validarUsuario(login,senha) == true){
HttpSession session = request.getSession();
session.setAttribute("usuario", new Usuario(login, senha));
response.sendRedirect("exibir.jsp");
}
else{
response.sendRedirect("login.jsp");
}
} catch (SQLException e) {
e.printStackTrace();
}
}[/code]
Na classe usuário tem o método:
public Usuario(String login, String senha){
this.setLogin(login);
this.setSenha(senha);
}
E os métodos get/set.
Fiz certo? Se sim, como eu faria se quisesse recuperar o login da sessão?
Ah , desculpa a ignorância, mas poderia me explicar essa parte return rs.next() ? true : false;
?
com certeza![/quote]
Opa! Vlw mauricioad.
Pois é, kvnallen. O que acha de implementar dessa forma? 
Acredito que posteriormente vai ficar bem melhor para acessar outras informações desse usuário, utilizando a sessão.
Como você quer o objeto na Sessão, eu faria diferente:
- Criaria o método, na classe DAO, de consultar um usuário por critérios de pesquisa:
[code]public class UsuarioDAO {
// Eu envio minha consulta SQL e ele trata de buscar o objeto.
public Usuario recuperarUsuarioPorCriteria(String criteria) throwss SQLException {
PreparedStatement preparedStatement = connection.prepareStatement(criteria);
ResultSet result = preparedStatement.executeQuery();
Usuario entidadeUsuario = null;
while (result.next()) {
entidadeUsuario = recuperarObjeto(result);
}
result.close();
return entidadeUsuario;
}
private Usuario recuperarObjeto(ResultSet result) { // monta seu objeto e retorna... }
}
[/code]
- Criaria uma classe de Serviços e ofereceria o serviço de validar o usuário no sistema:
public class ServicosUsuario {
public Usuario validarUsuario(String nome, String senha) throws SQLException {
String sentencaSQL = String.format(
"SELECT * FROM USUARIOS WHERE NOME LIKE '%%s%' AND SENHA LIKE '%%s%'",
usuario, senha);
UsuarioDAO usuarioDAO = new UsuarioDAO();
return usuarioDAO.recuperarUnicoPorCriteria(sentencaSQL);
}
}
- No seu Servlet…
String usuario = request.getParameter("usuario");
String senha = request.getParameter("senha");
ServicosUsuario servicosUsuario = new ServicosUsuario();
Usuario entidadeUsuario = servicosUsuario.validarUsuario(usuario, senha);
if (entidadeUsuario != null) {
// faz o que quiser...
}
else {
// exibe a mensagem de erro..
}
Que tal assim?
Espero ter ajudado,
fique com Deus! 
[quote=Nicolas Fernandes]Como você quer o objeto na Sessão, eu faria diferente:
- Criaria o método, na classe DAO, de consultar um usuário por critérios de pesquisa:
[code]public class UsuarioDAO {
// Eu envio minha consulta SQL e ele trata de buscar o objeto.
public Usuario recuperarUsuarioPorCriteria(String criteria) throwss SQLException {
PreparedStatement preparedStatement = connection.prepareStatement(criteria);
ResultSet result = preparedStatement.executeQuery();
Usuario entidadeUsuario = null;
while (result.next()) {
entidadeUsuario = recuperarObjeto(result);
}
result.close();
return entidadeUsuario;
}
private Usuario recuperarObjeto(ResultSet result) { // monta seu objeto e retorna... }
}
[/code]
- Criaria uma classe de Serviços e ofereceria o serviço de validar o usuário no sistema:
public class ServicosUsuario {
public Usuario validarUsuario(String nome, String senha) throws SQLException {
String sentencaSQL = String.format(
"SELECT * FROM USUARIOS WHERE NOME LIKE '%%s%' AND SENHA LIKE '%%s%'",
usuario, senha);
UsuarioDAO usuarioDAO = new UsuarioDAO();
return usuarioDAO.recuperarUnicoPorCriteria(sentencaSQL);
}
}
- No seu Servlet…
String usuario = request.getParameter("usuario");
String senha = request.getParameter("senha");
ServicosUsuario servicosUsuario = new ServicosUsuario();
Usuario entidadeUsuario = servicosUsuario.validarUsuario(usuario, senha);
if (entidadeUsuario != null) {
// faz o que quiser...
}
else {
// exibe a mensagem de erro..
}
Que tal assim?
Espero ter ajudado,
fique com Deus! :D[/quote]
Você é muito fera, mas ainda não tenho essa experiência toda que nem você, ainda estou engatinhando em comparação aos seus códigos.
Fico até doidinho ahuahuaha.
Eu sempre procuro entender em vez de apenas copiar e colar ^^