Jos� Carlos Rocha,

     Sou nova na lista e no java mas achei este material um dia desses, v�
se te serve.

Soraia
ps. do site
http://www.uol.com.br/webworld/tecnologia/handerson/hander6/hander006.htm

      Implementando passo a passo a applet Password
      Este artigo tenta mostrar todas as etapas de desenvolvimento de uma
applet simples e bastante �til. A maioria dos m�todos e eventos utilizados
neste artigo foram discutidos ou apresentados em uma das "dicas do dia". O
ponto inicial � apresentar o problema, com suas caracter�sticas e
limita��es. Em seguida vamos poder discutir a solu��o apresentada e os
recursos mais importantes utilizados no c�digo.
      Handerson Ferreira Gomes

      Defini��o do problema:
      Muitos usu�rios utilizam espa�o em servidores espalhados pela Internet
(como o Geocities, XOOM, Freespace etc.) para publicar suas p�ginas. Al�m
destes, a maioria dos provedores oferecem um espa�o para hospedagem de uma
p�gina de seus usu�rios. Grande parte deste provedores, e principalmente as
empresas que oferecem espa�o gratuito, n�o oferecem servi�os personalizados
para o usu�rio, como por exemplo a implementa��o de seguran�a.

      A proposta � construir uma aplica��o que fa�a a autentica��o de todos
usu�rios que acessem algumas p�ginas. Esta solu��o deve ser multiplataforma,
ocupar pouco espa�o em disco, ser de simples manute��o e de f�cil
manipula��o.

      A solu��o proposta:
      Implementar uma applet Java que fa�a a identifica��o do usu�rio. Em
uma p�gina principal o usu�rio se identifica e nas p�ginas subseq�entes uma
outra applet faz a autentica��o do usu�rio. Caso ele n�o tenha permiss�o
para acessar, o usu�rio ser� redirecionado para outra p�gina.



--------------------------------------------------------------------------

      Muito bem, a solu��o foi proposta e agora � necess�rio modelar as
classes que far�o parte deste aplicativo. Como todo sistema de autentica��o
pela Internet, ser� usado Login e Senha para fazer a autentica��o do
usu�rio. Estes dados precisam ser registrados em algum local e estarem
dispon�veis para que a segunda applet possa acess�-los e fazer a valida��o
do login em cada p�gina. Como fazer isto???

      Uma das solu��es pode ser armazenar os dados de login e senha num
arquivo tempor�rio, mas com isso a performance da applet pode ficar
seriamente comprometida. Uma boa solu��o � armazenar os dados de entrada
numa classe que tenha seus dados vis�veis por outras classes. Estes tipos de
dados s�o chamados de Static. M�todos e objetos podem ser definidos como
Static, o que faz destes m�todos e objetos acess�veis por qualquer outra
classe que esteja na m�moria cache do seu browser e no mesmo diret�rio. Esta
solu��o � boa e segura, pois os dados est�o armazenados na mem�ria do micro
cliente e os dados que est�o armazenados se referem a apenas este usu�rio,
isto �, sua senha e login.

      No servidor teremos um arquivo texto contendo os dados dos usu�rios
(Login,Senha e Nome) que podem acessar as p�ginas de seu site. A estrutura
deste arquivo � a seguinte:
      login:::senha:::nome do usuario
      login:::senha:::nome do usuario

      O problema parece estar resolvido. Ent�o vamos ver como ficou a
primeira tela.



      Duas observa��es podem ser feitas neste ponto. A primeira � sobre a
seguran�a deste dados. Se de alguma forma o usu�rio conseguir decompilar sua
classe, ele ter� o nome do arquivo que armazena os dados do usu�rio. Uma
forma de dificultar � utilizar um arquivo texto criptografado. Mas veja bem,
se ele conseguiu decompilar sua classe, isto quer dizer que ele poder�
descriptograr os dados e ver as informa��es. Mas � praticamente imposs�vel
existir um sistema completamente seguro, pelo menos por muito tempo.

      Vamos ter primeiro que criar a applet respons�vel pelo registro do
usu�rio. Os dados necess�rios s�o Login e Senha, como numa aplica��o
qualquer. Estes dados conforme especificado anteriormente estar�o
armazenados numa classe Static. Veja abaixo o c�digo fonte desta classe:


       Programa��o

            Coluna

            a.. Esperando pelo HotSpot o novo compilador din�mico da SUN


            b.. Java - Produtos & API's


            c.. Customiza��o � base para a cria��o de aplica��es de n�vel
mundial


            d.. Aumentando a performance de suas Applets


            e.. Comprimindo sua Applet: conhe�a o comando padr�o para criar
um arquivo JAR


            f.. Melhorando a performance de suas applets - parte II







--------------------------------------------------------------------------


      Handerson Ferreira Gomes � Bacharel em Ci�ncia da Computa��o e
Tecn�logo em Processamento de Dados pela Universidade de Alfenas,
desenvolvedor Java no Centro Internacional de Tecnologia de Software, um dos
produtores do site ClubeJava-BR e membro da comiss�o de estudos e
padroniza��o da Linguagem Java do Subcomit� de Software da ABNT.


--------------------------------------------------------------------------



          public class identificacao


              static String Login = new String();
              static String Senha = new String();
              static String Nome = new String();
              public identificacao(String _login, String _senha, String
_nome)


                Login = _login;
                Senha = _senha;
                Nome = _nome;
              }
              public identificacao(String _login, String _senha)


                Login = _login;
                Senha = _senha;
                Nome = "";
              }
              public identificacao()


                Login= "";
                Senha= "";
                Nome = "";
              }
              static String getLogin()


                return Login;
              }
              static String getSenha()


                return Senha;
              }
              static String getNome()


                return Nome;
              }
              static void setLogin(String login)


                Login = login;
              }
              static void setSenha(String senha)


                Senha = senha;
              }
              static void setNome(String nome)


                Nome = nome;
              }
            }



      Os m�todos criados nesta classe para defini��o e recupera��o de dados
n�o s�o necess�rios, pois como os dados s�o static eles n�o precisam
necessariamente dos m�todos para serem acessados.

      Agora j� podemos implementar a classe password. Esta classe ser�
respons�vel por solicitar os dados do usu�rio e armazen�-lo na classe
identificacao que criamos acima.

      Veja abaixo o c�digo fonte desta classe:


            import java.awt.*;
            import java.net.*;
            import java.applet.*;
            import java.awt.event.*;
            import java.util.*;
            import java.io.*;
            public class password extends Applet implements ActionListener


              Label llogin = new Label("Login: ");
              Label lsenha = new Label("Senha: ");
              TextField tlogin = new TextField(10);
              TextField tsenha = new TextField(10);
              String login = new String();
              String senha = new String();
              String nome = new String();
              Button ok = new Button("   OK   ");
              Image background;
              Font defaultFont = new Font( "Dialog", Font.ITALIC, 14 );
              String pagina = new String("password.html");
              boolean blogin=false;

              public void init()


                setBackground( new java.awt.Color( 128, 128, 255 ) );
                setForeground( java.awt.Color.black );
                llogin.setFont( new Font( "Monospaced", Font.BOLD, 14 ) );
                llogin.setBackground( new java.awt.Color( 128, 128, 255 ) );
                llogin.setForeground( java.awt.Color.yellow );
                lsenha.setFont( new Font( "Monospaced", Font.BOLD, 14 ) );
                lsenha.setBackground( new java.awt.Color( 128, 128, 255 ) );
                lsenha.setForeground( java.awt.Color.yellow );
                tsenha.setEchoChar('*');
                ok.setFont( new Font( "Monospaced", Font.BOLD, 14 ) );
                ok.setBackground( new java.awt.Color( 0, 0, 160 ) );
                ok.setForeground( java.awt.Color.white );
                ok.setActionCommand("OK");
                ok.addActionListener(this);
                tlogin.setFont( defaultFont );
                tsenha.setFont( defaultFont );

                add(llogin);
                add(tlogin);
                add(lsenha);
                add(tsenha);
                add(ok);
                if (getParameter("BGImage") != null)
                     background =
getImage(getCodeBase(),getParameter("BGImage"));
              }
              public void paint (Graphics g)


                if (getParameter("BGImage") != null)
                    g.drawImage(background,0,0,this);
              }
              public void actionPerformed(ActionEvent evento)


                  Object eventTarget = evento.getSource();
                  if( eventTarget == ok)


                     identificacao id = new
identificacao(tlogin.getText(),tsenha.getText());
                     pegarConfiguracao();
                     if (getParameter("Redirect") != null)
                       pagina = getParameter("Redirect");

                     if (!blogin)
                        String url = new String(getCodeBase()+pagina);
                     try


                       URL conectar = new URL(url);
                       getAppletContext().showDocument(conectar);
                     }
                     catch(MalformedURLException erro)


                       System.out.println("erro");
                     }
                 }
                 else


                     String url = new
String(getCodeBase()+"autenticacao.html");
                     try


                       URL conectar = new URL(url);
                       getAppletContext().showDocument(conectar);
                     }
                     catch(MalformedURLException erro)


                       System.out.println("erro");
                     }
                  }
                }
              }
              public void pegarConfiguracao()


                 StringTokenizer token;
                 URL url = null;
                 DataInputStream is = null;
                 String buf;
                 try


                    url = new URL(getDocumentBase(),"autentic.log");
                    is = new DataInputStream(url.openStream());
                 }
                 catch (Exception e)


                    is = null;
                 }
                 if (is == null)


                    System.out.println("Nao pode abrir o arquivo");
                 }
                 try


                   String line = null;
                   line = is.readLine();
                   int i=1;
                   while (line != null)


                      if (line.length() > 0)


                         token=new StringTokenizer(line,":::");
                         login=token.nextElement().toString();
                         if ((login.equals(identificacao.Login)) &&
(!blogin))


                           senha=token.nextElement().toString();
                           if (senha.equals(identificacao.Senha))


                              blogin = true;
                              if (token.hasMoreTokens())

identificacao.setNome(token.nextElement().toString());
                              return;
                           }
                         }
                         i++;
                      }
                      line = is.readLine();
                    }
                    is.close();
                 }
                 catch (IOException e)


                    System.out.println("Falha Geral");
                 }
               }
            }



      Os pontos mais importantes da classe acima est�o identificados em
negrito. O ponto mais importante desta classe � criar um objeto da classe
identifica��o com os dados do us�rio. O fragmento do c�digo que faz isto �:

      identificacao id = new
identificacao(tlogin.getText(),tsenha.getText());

      Depois deste passo chamamos o m�todo pegarConfiguracao() que l� o
arquivo texto e faz a compara��o entre os dados da classe identificacao com
o arquivo texto autentic.log onde est�o armazenados os usu�rios registrados.

      Pela l�gica constru�da acima o seguinte passo � verificar o resultado
deste m�todo. Se a vari�vel login estiver valendo false ent�o o usu�rio �
redirecionado para uma p�gina de erro, caso contr�rio ele se dirige para uma
p�gina de confirma��o e de boas vindas � �rea restrita.

      Parece que o problema est� solucionado. Mas o usu�rio entrando uma vez
na p�gina restrita poder� ir direto para ela nas pr�ximas visitas ao site
n�o passando pela tela de password. Para resolver isto, criamos uma pequena
applet que � inserida em todas as outras p�ginas que faz a mesma verifica��o
utilizada no m�todo pegar Configuracao(). Desta forma se o usu�rio tentar
acessar a p�gina sem passar pela applet de password ele ser� redirecionado
para uma p�gina definida. Veja o c�digo fonte desta applet:




          import java.awt.*;
            import java.net.*;
            import java.applet.*;
            import java.awt.event.*;
            import java.util.*;
            import java.io.*;
            public class autenticacao extends Applet


              Label rotulo = new Label();
              String pagina = new String("password.html");
              String login = new String();
              String senha = new String();
              String nome = new String();
              boolean blogin=false;
              Font defaultFont = new Font( "Dialog", Font.ITALIC, 14 );

              public void init()


                setBackground(Color.white);
                pegarConfiguracao();
                if (getParameter("Redirect") != null)


                  pagina = getParameter("Redirect");
                }
                rotulo.setFont( new Font( "Monospaced", Font.BOLD, 14 ) );
                rotulo.setText("Caro(a) amigo(a) "+identificacao.Nome+".
Seja Bem-Vindo a minha Home-Page!");
                add(rotulo);
              }
              public void start()


               if (!blogin)


                 String url = new String(getCodeBase()+pagina);
                 try


                   URL conectar = new URL(url);
                   getAppletContext().showDocument(conectar);
                 }
                 catch(MalformedURLException erro)


                   System.out.println("erro");
                 }
               }
              }
              public void pegarConfiguracao()


                 StringTokenizer token;
                 URL url = null;
                 DataInputStream is = null;
                 String buf;
                 try


                    url = new URL(getDocumentBase(),"autentic.log");
                    is = new DataInputStream(url.openStream());
                 }
                 catch (Exception e)


                    is = null;
                 }
                 if (is == null)


                 System.out.println("Nao pode abrir o arquivo");
                 }
                 try


                  String line = null;
                  line = is.readLine();
                  int i=1;
                  while (line != null)


                    if (line.length() > 0)


                      token=new StringTokenizer(line,":::");
                      login=token.nextElement().toString();
                      if ((login.equals(identificacao.Login)) && (!blogin))


                        senha=token.nextElement().toString();
                        if (senha.equals(identificacao.Senha))


                          blogin = true;
                          if (token.hasMoreTokens())



identificacao.setNome(token.nextElement().toString());
                          }
                          return;
                        }
                      }
                      i++;
                    }
                    line = is.readLine();
                  }
                  is.close();
               }
               catch (IOException e)


                  System.out.println("Falha Geral");
               }
              }
            }



      Com esta applet o problema de acesso a �reas restritras de seu site
fica mais f�cil de resolver. Antes de apresentar o link para voc� testar o
applet gostaria de fazer algumas considera��es:

        a.. esta applet n�o � e n�o tenta ser uma solu��o final para a
seguran�a de seus dados na WEB;
        b.. uma solu��o mais segura para esta applet � acessar os dados do
usu�rio a partir de um banco de dados, j� que o mesmo oferece maior
seguran�a quando comparado a arquivos texto.
      Visite a p�gina password.html e veja a applet em funcionamento.
      Se quiser pode baixar tamb�m a applet com os c�digos fontes e arquivos
necess�rios para o funcionamento da mesma.

      password.java
      autenticacao.java
      identificacao.java
      password.class
      autenticacao.class
      identificacao.class
      autentic.log








      Neg�cios | Marketing | Tecnologia
      HOME


----- Original Message -----
From: "jdkrocha" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Monday, May 21, 2001 3:06 PM
Subject: [java-list] trocando password


> Presados usuarios da lista.
>
> Essa � a primeira vez que escrevo para essa lista, e agora estou
precisando de
> uma m�ozinha.
> Alguem conhece algum servlet ou applet que posso usar para que um usuario
possa
> trocar sua propria senha atravez de um browser???
>
> Atenciosamente,
>
>
> --
>   �v�   Secretaria de Estado da Fazenda
>  /(_)\  Jos� Carlos Rocha (linux user)
>   ^ ^
>
>
> ------------------------------ 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]
> -------------------------------------------------------------------------
>
>

applet01.gif

wwlogo_topo.gif

barra_ww2.gif

Responder a