Problemas com PreparedStatement  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
markin1
JavaEvangelist

Membro desde: 07/12/2008 20:58:59
Mensagens: 494
Localização: São Paulo
Offline

Bom dia pessoal, eu tô com um probleminha no SQL Server e PreparedStatement.
É apenas uma classe de login e senha mas nunca retorna nada a menos que eu passe os parâmetros de login e senha diretamente na String SQL. Eu não sei o que tem de errado ai, acho que é algo na String SQL mas eu não consigo achar o que exatamente.

Enfim vou postar aqui minhas classes.

UsuarioData


UsuarioBean:

Conexao:

Quem é o juíz?
[Email]
Murilo_Ferreira
JavaTeenager

Membro desde: 01/08/2008 15:27:48
Mensagens: 156
Localização: Bombinhas-SC
Offline

Bom dia amigão,

só uma pergunta, o codigo retorna algum erro?, ou simplemente não retorna nada?

porque a passagem de paramentros esta correta.

valew
markin1
JavaEvangelist

Membro desde: 07/12/2008 20:58:59
Mensagens: 494
Localização: São Paulo
Offline

Não dá erro algum.
Hora que passa pelo if(rs.next()) é como se não encontrasse o registro e sai do método. Eu testo diretamente no SQL Server passando os mesmos parâmetros e encontra o registro, mas pelo java não encontra a menos que eu passe diretamente os parâmetros na string SQL.

This message was edited 2 times. Last update was at 13/02/2009 08:53:39


Quem é o juíz?
[Email]
maschiojv
JavaChild
[Avatar]

Membro desde: 27/02/2007 18:29:37
Mensagens: 119
Offline

Será que não está faltando % no seu like?
markin1
JavaEvangelist

Membro desde: 07/12/2008 20:58:59
Mensagens: 494
Localização: São Paulo
Offline

creio que não, como é um sistema de login eu tenho que pegar o registro exatamente igual ao parâmetro, se eu por % ele vai pegar qualquer registro parecido, por exemplo, usando % e digitar usuario: mar senha: 123 o sistema vai me retornar todos os registros que tenham mar no usuário e 123 na senha, por exemplo

marcelo, 123afd
marcos, 123mma
mario, 123asd

e assim por diante, ou estou equivocado?

Quem é o juíz?
[Email]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Não use LIKE para usuário e senha. Imagine se o cara digita "%%" para o usuário e senha; então QUALQUER usuário será validado, inclusive o tal hackeer ou cracker que vai destruir seu sistema. Insista no uso de "=", NUNCA NUNCA NUNCA o LIKE.
[WWW]
markin1
JavaEvangelist

Membro desde: 07/12/2008 20:58:59
Mensagens: 494
Localização: São Paulo
Offline

thingol wrote:Não use LIKE para usuário e senha. Imagine se o cara digita "%%" para o usuário e senha; então QUALQUER usuário será validado, inclusive o tal hackeer ou cracker que vai destruir seu sistema. Insista no uso de "=", NUNCA NUNCA NUNCA o LIKE.


mas no SQL Server não da pra usar = em comparações de String, ou dá?! Se dá, eu não sei como fazer ^^
[Email]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

E mais uma coisa: por motivos de segurança, evite informar o usuário que "a senha está incorreta", se o usuário for encontrado no sistema mas a senha não.

O correto é barrar o acesso sempre, e sempre com a mesma mensagem "usuário e/ou senha estão incorretos", porque aí alguém que quiser entrar indevidamente não poderá nem "chutar" a senha de um usuário existente, já que ele não vai conseguir achar nem um nome de usuário.
[WWW]
maschiojv
JavaChild
[Avatar]

Membro desde: 27/02/2007 18:29:37
Mensagens: 119
Offline

thingol wrote:Não use LIKE para usuário e senha. Imagine se o cara digita "%%" para o usuário e senha; então QUALQUER usuário será validado, inclusive o tal hackeer ou cracker que vai destruir seu sistema. Insista no uso de "=", NUNCA NUNCA NUNCA o LIKE.


mas ele está usando prepareStatment, ele já não é seguro contra sql injection?
markin1
JavaEvangelist

Membro desde: 07/12/2008 20:58:59
Mensagens: 494
Localização: São Paulo
Offline

thingol wrote:E mais uma coisa: por motivos de segurança, evite informar o usuário que "a senha está incorreta", se o usuário for encontrado no sistema mas a senha não.

O correto é barrar o acesso sempre, e sempre com a mesma mensagem "usuário e/ou senha estão incorretos", porque aí alguém que quiser entrar indevidamente não poderá nem "chutar" a senha de um usuário existente, já que ele não vai conseguir achar nem um nome de usuário.

:)

Quanto a usar = ao invés de LIKE eu recebo a seguinte mensagem:
[Email]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

markin1 wrote:
thingol wrote:Não use LIKE para usuário e senha. Imagine se o cara digita "%%" para o usuário e senha; então QUALQUER usuário será validado, inclusive o tal hackeer ou cracker que vai destruir seu sistema. Insista no uso de "=", NUNCA NUNCA NUNCA o LIKE.


mas no SQL Server não da pra usar = em comparações de String, ou dá?! Se dá, eu não sei como fazer ^^


É claro que dá, afinal de contas SQL Server não é Java e ele não usa "EQUALS" e sim "=".



[WWW]
maschiojv
JavaChild
[Avatar]

Membro desde: 27/02/2007 18:29:37
Mensagens: 119
Offline

temte colocar um trim nas suas comparações, trim(usuario) LIKE trim (?), o problema pode ser que no banco tem espaços em branco sobrando, tive um problema desses uns dias a traz.
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

markin1 wrote:
thingol wrote:E mais uma coisa: por motivos de segurança, evite informar o usuário que "a senha está incorreta", se o usuário for encontrado no sistema mas a senha não.

O correto é barrar o acesso sempre, e sempre com a mesma mensagem "usuário e/ou senha estão incorretos", porque aí alguém que quiser entrar indevidamente não poderá nem "chutar" a senha de um usuário existente, já que ele não vai conseguir achar nem um nome de usuário.

:)

Quanto a usar = ao invés de LIKE eu recebo a seguinte mensagem:


Qual é o tipo dos dados dessas colunas? A coluna (usuário ou senha, não sei qual delas), se estou pensando bem, está cadastrada com tipo errado . O uso do tipo "text" em SQL Server só deve ser feito se você precisar de pôr uma quantidade de dados grande, como um documento; não um nome de usuário ou uma senha, que são coisas pequenas. Mude para "varchar".
[WWW]
markin1
JavaEvangelist

Membro desde: 07/12/2008 20:58:59
Mensagens: 494
Localização: São Paulo
Offline

Demorei mas voltei ^^
Realmente o problema estava no tipo de dados, o campo senha estava como text, mudei pra varchar e substitui o LIKE por = na String SQL agora tá funcionando direitinho.

Agradeço a todo mundo ai que deu uma ajuda.

Quem é o juíz?
[Email]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team