Your message was not delivered to all recipients.

     Subject:  [java-list] jsp : como saber se um usuario jah esta autentic
     Sent:     7/25/01 10:30:00 AM

The following email address(es) were unknown:

PODINAP MARCOS BORGES at PODINAP

Pessoal,

meu esquema de autenticacao em uma pagina , com login e senha, armazena na
sessao o identificador do usuario bem como outras informacoes relevantes. Eu
tambem gravo o id da sessao do usuario no banco de dados para garantir uma
certa seguranca.
Este meu sistema eh comum para varios usuarios. Eh um formulario comum a
todos.
Mas quando um usuario esta logado, e outro tenta se autenticar,  este
consegue e o outro fica a ver navios. isto eh, ele eh desconectado do
sistema.

eu pensei em criar uma variavel boolena para indicar que o usuario esta
conectado, mas caso o usuario saia sem efetuar logoff, esta variavel iria
permanecer com o valor true.

Alguem tem ideia de como fazer  algo para que , quando um usuario  estiver
conectado e outro tentar se conectar, este receber uma mensagem de que jah
existe um usuario usando o sistema.

grato pela atencao.







------------------ login.jsp


<%@ page import="java.sql.*,java.util.*,java.security.*,sun.misc.*"
session="false"%>
<%

/*
    ESTA PAGINA NAO EXIGE QUE SEJA AUTENTICADA
  ESTA PAGINA EXECUTA FUNCOES DE VALIDACAO QUE CRIAM OS DADOS NECESSARIOS
 PARA QUE AS PAGINAS POSTERIORES POSSAM SER USADAS ATRAVES DE AUTENTICACAO
*/


/*
a pagina de login (esta)  coloca na sessao o tipo de usuario.
isto eh necessario para a criacao de menus personalizados para cada tipo de
usuario
*/

// Conexao com RESIN
Connection con =
com.caucho.sql.DBPool.getPool("xurumelasConnection").getConnection();
// >>>

Statement stmt;
stmt=con.createStatement();
ResultSet rs = null;
String queryInsert= new String();
String query= new String();

%>
<%

String idUser = new String(); // id do usuario . sera utilizado pra
atualizar o banco de dados.
String nome = new String(); // nome do usuario. sera utilizado na sessao
para dar boas vindas para o usuario! :)
String login = new String();// email veio do form . o email eh o login name
do usuario
String senha = new String(); // senha que veio do form
String hashLocal = new String(); // hash(md5)  da senha q veio do form
String hashDB = new String(); // hash armazenado no banco de dados.  eh
utilizada para comparar com o hash gerado na autenticacao.
boolean multiusuario = false; // usuario nao eh multiusuario por default
Integer tipoTemp = null;
String tipoParaSessao = null; // tipo do usuario . importante para fazer o
encaminhanto para o menu correto. eh obtida da col tp_usuario tabela usuario
int tipo = 0; // para ser usado nesta pagina. o tipo para sessao eh porque
putValue da session soh aceita string
String sessionID = new String(); // session criada caso usuario seja
validado. sera incluida na coluna sessionID da tabela usuario

 // nota: a session sera sempre atualizada do banco de dados toda vez que o
usuario tiver sucesso na autenticacao.

 // o valor inicial da sessionID no banco de dados eh nulo, pois na
aprovacao do pre-cadastro eh feita a validacao e insercao de todas as
colunas
 // da tabela usuario.
 // o hash armazenado na tabela usuario , foi inicialmente carregado atraves
de uma senha inicial que o sistema gerou quando efetuou a
 // aprovacao do usuario


%>
<%
// parametros vindos do formulario da pagina formulario_login.jsp
login=request.getParameter("email");
senha=request.getParameter("senha");
%>
<%
// verifica se parametros sao validos

boolean continuar = false;
boolean achouEmail = false;
boolean hashesIguais = false;

 if  ( (login!=null)&&(senha!=null) )
 {
  if ( (login.length()>5)&&(senha.length()==8)) // o usuario digitou um
email e entrou com a senha com tamanho de 8 caracteres
  {
   continuar=true;
  }
 }



if (continuar)
{
 // verifica se email existe
 // retorna hs_senha, id_usuario, nm_usuario e tp_usuario

 query = "select
id_usuario,nome_do_usuario,hash_senha_do_usuario,tipo_de_usuario,multiusuari
o_usuario from usuario where situacao_do_usuario='n' AND
email_do_usuario='"+login+"'"; //verifica se email existe

 rs= stmt.executeQuery(query); //pesquisa por email do usuario
#####################
 achouEmail = rs.next();
 if (achouEmail)
 {

  idUser = rs.getString("id_usuario");
  nome = rs.getString("nome_do_usuario");
  hashDB = rs.getString("hash_senha_do_usuario");
  tipoTemp = Integer.valueOf(rs.getString("tipo_de_usuario"));
  multiusuario = rs.getBoolean("multiusuario_usuario");  // 1=true, 0=false
  tipo = tipoTemp.intValue();
  tipoParaSessao = tipoTemp.toString();

  // gera hash da senha q veio do form
   byte[] inputBytes = senha.getBytes("UTF8");
   MessageDigest md5 = MessageDigest.getInstance("MD5");

   md5.update(inputBytes);
   byte[] digest = md5.digest();

   BASE64Encoder encoder = new BASE64Encoder();
   hashLocal = encoder.encode(digest);


   // compara os hashes
   if ( hashLocal.compareTo(hashDB)==0 )
   {
    //hashes sao iguais
    hashesIguais =true;
   }
 }


%>
<% } // if continuar
else
{

 con.close();

%>
<jsp:forward page="formulario_loginErro.jsp" />
<% } // else continuar%>
<html>

<head>
<title>sistema xyz</title>
<meta http-equiv="pragma" content="no-cache"><meta
http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="expires" content="sat, 04 dec 1993 21:29:02 gmt">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
</head>

<body>

<p align="center"><font face="Arial" size="3" color="#FF0000">Validacao de
login e senha
do usuario</font></p>

<p align="center"><font face="Arial" size="3" color="#FF0000">Esta p gina
cria a sessao
do usuario e encaminha para a sua pagina de menu</font></p>

<p align="center"><font face="Arial" size="3"
color="#FF0000"><%=hashesIguais%></font></p>
<% if (hashesIguais) //hashesIguais
{

 // cria sessao para usuario e armazena no banco de dados na tabela usuario
de acordo com o id usuario
 HttpSession session = request.getSession(true);
 session.putValue("idUser",idUser);
 session.putValue("tipo",tipoParaSessao);
 session.putValue("nome",nome);


 query = "UPDATE usuario SET "+
    " sessao_do_usuario='"+session.getId()+"' "+   //valor da session id em
string
    " where id_usuario=" + idUser;

     stmt.executeUpdate(query);




%>
<%
// redireciona usuario para menu admin,consultor ou usuario


switch(tipo)
{
 case 1: //admin
%>
<jsp:forward page="menu_admin.jsp" />
<% break;
 case 2://consultor
%>
<jsp:forward page="menu_consultor.jsp" />
<% break;
 case 3://usuario informante
%>
<% if (multiusuario)
{
%>
<jsp:forward page="menu_multiusuario.jsp" />
<%
}
else
{
%>
<jsp:forward page="menu_usuario.jsp" />
<%
}
%>
<% break;

 default: //pagina login
%>
<jsp:forward page="formulario_loginErro.jsp" />
<%
}  //switch
%>

<p><%


} // if hashes iguais
else
{
 con.close();

%> <jsp:forward page="formulario_loginErro.jsp" /> <%
} // else hashes

 con.close();

%> </p>

<p>&nbsp;</p>
<% if (!achouEmail) {
%>
<jsp:forward page="formulario_loginErro.jsp" />
<%} // if achouemail
%>
</body>
</html>





------------------------------ LISTA SOUJAVA ----------------------------
http://www.soujava.org.br  -  Sociedade de Usu rios Java da Sucesu-SP
d£vidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
para sair da lista: envie email para [EMAIL PROTECTED]
-------------------------------------------------------------------------

------------------------------ LISTA SOUJAVA ----------------------------
http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
para sair da lista: envie email para [EMAIL PROTECTED]
-------------------------------------------------------------------------

Responder a