Criando tela de autenticação

7 respostas
S

Estou tentando criar uma tela de autenticação que verifica se é um cliente ou um funcionario, ser for um cliente ele armazena um valor referente ao codigo num cookie e abre a página dos clientes equanto esta página pega o valor armazenado no cookie mas isto é uma outra história. Altualmente a tela de logon está assim:

<%@page contentType="text/html; charset=ISO-8859-1" language="java" import="java.sql.*" import="javax.servlet.http.*" %>
<%@ page errorPage="/errorpage.jsp" %>
<%@include file="/conecta/Acesso.jsp"%>
<%
 
String user = request.getParameter("user");
String senha =  request.getParameter("senha");
String userfunc ="", senhafunc ="", usercli ="", senhacli ="";
ResultSet rescli = stm.executeQuery( "select user, senha from clientes");
ResultSet resfunc = stm.executeQuery("select user, senha from funcionario");

while (resfunc.next() && rescli.next()){
userfunc = resfunc.getString("user");
senhafunc = resfunc.getString("senha");
usercli = rescli.getString("user");
senhacli = rescli.getString("senha");
ResultSet res = stm.executeQuery( "select codigo from clientes  where user = "+usercli);

if ((user == userfunc)&&(senha == senhafunc)){
out.println("<div align=center>");
out.println("<iframe src=gerenciamento.html name=gerenciamento id=gerenciamento width=480 height=350 scrolling=no frameborder=0></iframe>");
out.println("</div>");
}
if((user == usercli)&&(senha == senhacli)){
String codigo = res.getString("codigo");
String cookieName = "codig";

Cookie cookieatentic = new Cookie(codig, codigo);
cookieJSP.setMaxAge(7 * 24 * 60 * 60); 
cookieJSP.setVersion(0); 
cookieJSP.setSecure(false); 
cookieJSP.setComment("Codigo do cliente"); 
response.addCookie(cookieautentic);

out.println("<script>window.open('clientes/consulta.jsp')</script>");

}
else{ out.println("<script>alert('Nome de usuário ou senha inválidos!'); history.go(-1);</script>");}
resfunc.close();
rescli.close();
res.close();
%>

O aviso de erro é:

Generated servlet error:
    [javac] Since fork is true, ignoring compiler setting.
    [javac] Compiling 1 source file
    [javac] Since fork is true, ignoring compiler setting.
    [javac] C:TomcatworkStandalonelocalhost	cclogin_jsp.java:97: 'catch' without 'try'
    [javac]     } catch (Throwable t) {
    [javac]       ^
    [javac] C:TomcatworkStandalonelocalhost	cclogin_jsp.java:37: 'try' without 'catch' or 'finally'
    [javac]     try {
    [javac]     ^
    [javac] C:TomcatworkStandalonelocalhost	cclogin_jsp.java:107: '}' expected
    [javac] ^
    [javac] 3 errors

Desde já agradeço.

7 Respostas

smota

Provavelmente o erro esta em conecta/Acesso.jsp.

Ele ta reclamando que vc tem um bloco CATCH sem um TRY … verifique isso.

Rafael_Steil

Varios erros: voce nao pode comparar strings ( ou melhor, objetos ) usando o operador de igualdade, mas sim usando o metodo “equals”:

Troque os codigos como

if ((user == userfunc)&&(senha == senhafunc)){

por

if ((user.equals(userfunc))&&(senha.equals(senhafunc))){

Depois, tem alguma parte em seu codigo com uma clausula “try” tem um “catch” associado, conforme a mensagem de erro.

por exemplo, deve ter algo como

try {
    // codigo
}

ao inves de

try {
    // codigo
}
catch (Exception e) {
    // tratamento de erro
}

Rafael

kuchma

Nem olhei o codigo do JSP, mas vou deixar um chute: quando acontece esse tipo de erro numa pagina JSP e voce acha que seu codigo esta correto (exemplo: nao falta catch no try ou nem tem try), verifique se nao falta ou sobra nenhuma chave de abertura ( { ) ou fechamento ( } ) de bloco.

O codigo do JSP eh transformado num servlet (se voce usa o Tomcat da uma olhada no diretorio work pra entender melhor) e entao eh compilado. Se voce deixar algum bloco fechado incorretamente ele pode acusar esses erros estranhos.

Se parecer doidera, deixa pra la - estou colocando isso porque ja aconteceu comigo. :smiley:

Marcio Kuchma

S

No caso aqui rafael, não fix algo compilado. Fiz direto na página, por isso não usei o try{} catch{} acho que neste caso nem é preciso. Vou te dizer o que estou tentando fazer talvez alguém saiba de uma solução melhor. Bom tenho que verificar se o usuario se enquandra como funcionádio ou cliente. para isto fiz 2 conexões cimultanes no banco de dados.

ResultSet rescli = stm.executeQuery( "select user, senha from clientes"); 
ResultSet resfunc = stm.executeQuery("select user, senha from funcionario");

Daí verifico onde o login e senha está cadastrado se é na tabela cliente ou funcionário e envio pra a tela correspondente. Até aqui estou correto? Acho que é aí que está o problema.

S

Refiz meu código e ele ficou assim:

<%@page contentType="text/html; charset=ISO-8859-1" language="java" import="java.sql.*" import="javax.servlet.http.*" %>
<%@ page errorPage="/errorpage.jsp" %>
<%@include file="/conecta/Acesso.jsp"%>
<%
 
String user = request.getParameter("user");
String senha = request.getParameter("senha");

ResultSet rescli = stm.executeQuery( "select user, senha from clientes");
ResultSet resfunc = stm.executeQuery("select user, senha from funcionario");

String userfunc = resfunc.getString("user");
String senhafunc = resfunc.getString("senha");
String usercli = rescli.getString("user");
String senhacli = rescli.getString("senha");

if ((user.equals(userfunc))&&(senha.equals(senhafunc))){ 
out.println("<div align=center>");
out.println("<iframe src=gerenciamento.html name=gerenciamento id=gerenciamento width=480 height=350 scrolling=no frameborder=0></iframe>");
out.println("</div>");
}
if ((user.equals(usercli))&&(senha.equals(senhacli))){ 
ResultSet res = stm.executeQuery( "select codigo from clientes where user = " +usercli);
String codigo = res.getString("codigo");
String cookieName = "codigo";

Cookie cookieautentic = new Cookie(cookieName, codigo);
cookieautentic.setMaxAge(7 * 24 * 60 * 60); 
cookieautentic.setVersion(0); 
cookieautentic.setSecure(false); 
cookieautentic.setComment("Codigo do cliente"); 
response.addCookie(cookieautentic);

out.println("<script>window.open('clientes/consulta.jsp')</script>");
res.close();
}
else{ out.println("<script>alert('Nome de usuário ou senha inválidos!'); history.go(-1);</script>");}
resfunc.close();
rescli.close();

%>

como o kuchma avia dito realmente estava com um if por fechar, mas agora o erro é: Before start of result set
O estranho é que não dei nenhum resultado antes de iniciar? Desde já agradeço!

Rafael_Steil

Vc precisa dar um rs.next() logo apos o executeQuery() para avancar o ponteiro para a primeira posicao ( ou sequentes ).

Rafael

S

E aí galera, tudo bem? Eu estou bem. Estive estudando mais a fundo meu caso e resolvi fazer uma autenticação por vez. Por isso dei uma enxugada no meu código que ficou assim:

<%@page contentType="text/html; charset=ISO-8859-1" language="java" import="java.sql.*" import="javax.servlet.http.*" %>
<%@ page errorPage="/errorpage.jsp" %>
<%@include file="/conecta/Acesso.jsp"%>
<%
 
String user = request.getParameter("user");
String senha = request.getParameter("senha");

ResultSet res = stm.executeQuery( "select user, senha, codigo from clientes where user = " +user);
while (res.next()){
String usercli = res.getString("user");
String senhacli = res.getString("senha");

if ((user.equals(usercli))&&(senha.equals(senhacli))){ 

String codigo = res.getString("codigo");
String cookieName = "codigo";

Cookie cookieautentic = new Cookie(cookieName, codigo);
cookieautentic.setMaxAge(7 * 24 * 60 * 60); 
cookieautentic.setVersion(0); 
cookieautentic.setSecure(false);
cookieautentic.setComment("Codigo do cliente"); 
response.addCookie(cookieautentic);

response.sendRedirect("/clientes/consulta.jsp");
}
else{ out.println("<script>alert('Nome de usuário ou senha inválidos!'); history.go(-1);</script>");}
}
res.close();
%>

O problema agora é que ele simplesmente abre uma tela em branco. Mesmo se eu colocar um login e senha que não estejam no banco de dados ele me dá uma tela em branco e não faz mais nada. Tem algo errado no meu if? Desde já agradeço! :smiley:

Criado 3 de outubro de 2003
Ultima resposta 4 de out. de 2003
Respostas 7
Participantes 4