Utilizando três camadas
Nos passos
anteriores mostrei como criar STORED PROCEDURE, banco de dados, Global.asa
dentro do Visual Basic 6.0, classes com “functions” e muito mais. Todos os
passos anteriores podem ser encontrados no site www.aspneti.com ou www.juliobattisti.com.br/tutoriais/mauricioborges.
Espero que possa estar ajudando.
Desenvolvi três
páginas básicas para logar no sistema utilizando segurança com os componentes
construídos anteriormente. (Referência 10.1).
- frmLogin.asp -
frmLoginPersistir.asp -
frmPaginaPrincipal.asp |
Referência: 10.1
Explicação do
funcionamento de cada página.
Essa página é
responsável por mostrar os campos obrigatórios de preenchimento usuário e
senha. Possui os botões de “Entrar”, “Alterar” e “Sair” dentro da tela. Digitando
os valores, são enviados dados via “POST” para a página “frmLoginPersistir.asp”.
Depois de enviado
os dados da página “frmLogin.asp” para “frmLoginPersistir.asp”, a mesma é
responsável em criar o objeto da classe “clsSegurança” do Visual Basic 6.0
criado anteriormente, passando os dados necessários para autenticação junto ao
banco de dados, cujo o campo senha está criptografado.
frmPaginaPrincipal.asp
A página
principal é apenas para mostrar todos os menus montados de acordo com as
permissões do usuário. É a página principal do sistema para o acesso às
funcionalidades essenciais.
* frmLogin.asp
(Referência 10.2)
<html> <head><title>..::
SISCPE ::..</title></head> <script
language="javascript"> function
sFoco(){ if
(document.frmLogin.txtUsuario){ document.frmLogin.txtUsuario.focus(); } } function
sValidarLogin(){ if
(f_eVazio(document.frmLogin.txtUsuario.value)){ alert(f_Mensagem(1)); document.frmLogin.txtUsuario.focus(); return; } if
(f_eVazio(document.frmLogin.txtSenha.value)){ alert(f_Mensagem(1)); document.frmLogin.txtSenha.focus(); return; } document.frmLogin.method
= 'post'; document.frmLogin.action
= 'frmLoginPersistir.asp'; document.frmLogin.submit(); } function
sSair(){ window.close(); } function
s_AlterarSenha(){ document.frmLogin.method
= 'post'; document.frmLogin.action
= 'frmAlterarSenha.asp'; document.frmLogin.submit(); } function
enter(codigo){ if
(codigo == 13){ sValidarLogin(); } } </script> <body
topmargin="0" leftmargin="0"
onload="sFoco();"> <form
name="frmLogin"> <table
border="0" cellpadding="0" cellspacing="0"
width="100%" height="100%"> <!--#include
file="../includes/barra_titulo.asp"--> <tr
align="left"> <td
align="center"><!-- Inicio da Página --> <table CELLSPACING="1"
cellpadding="0" class="formulario"
width="230px"> <tr>
<th
colspan="4">Login</th> </tr> <tr>
<th
width="18">01</th> <td> <b> Usuário:</b> <br> <input name="txtUsuario"
onkeypress="enter(event.keyCode);"
value="<%=Request("txtUsuario")%>"
size="25" style="HEIGHT: 17px"> </td> <td
rowspan="2" width="40px" valign="middle"> <br> <img
style="background:none" SRC="../images/login.gif"
WIDTH="35" HEIGHT="33"> </td> </tr> <tr>
<th
width="18">02</th> <td> <b>Senha:</b>
<br> <input type="password"
onkeypress="enter(event.keyCode);" name="txtSenha"
value="<%=Request("txtSenha")%>"
size="25" style="HEIGHT: 17px"> </td> </tr> </table> <table
class="formulario" cellSpacing="1"
cellPadding="0" width="230px"> <tr> <th
align="middle"> <input
type="button" value="Entrar" name="btnEntrar"
onclick="sValidarLogin();"> <input
type="button" value="Alterar" name="btnAlterar"
onclick="s_AlterarSenha();"> <input
type="button" value="Sair" name="btnSair"
onclick="sSair()"> </th> </tr> </table> </td> </tr> </table> </form> </body> </html> |
Referência: 10.2
Explicação:
(Referência 10.2)
Essa página
mostra apenas a tela de login onde o usuário entra com usuário e senha para
logar no sistema. Como toda página ASP, possue código javascript para tornar as
funcionalidades mais dinâmicas e especiais ao usuário que está utilizando o
sistema.
A parte em
javascript está dividida em “functions”. (Referência 10.3).
<script language="javascript"> function
sFoco(){ if
(document.frmLogin.txtUsuario){ document.frmLogin.txtUsuario.focus(); } } function
sValidarLogin(){ if
(f_eVazio(document.frmLogin.txtUsuario.value)){ alert(“Digite o
usuário”); document.frmLogin.txtUsuario.focus(); return; } if
(f_eVazio(document.frmLogin.txtSenha.value)){ alert(“Digite
a senha”); document.frmLogin.txtSenha.focus(); return; } document.frmLogin.method
= 'post'; document.frmLogin.action
= 'frmLoginPersistir.asp'; document.frmLogin.submit(); } function
sSair(){ window.close(); } function
s_AlterarSenha(){ document.frmLogin.method
= 'post'; document.frmLogin.action
= 'frmAlterarSenha.asp'; document.frmLogin.submit(); } function
enter(codigo){ if
(codigo == 13){ } } </script> |
Referência: 10.3
Explicação
Javascript.
Esses códigos
javascript, são apenas detalhes da página, serve para validação de campo e tudo
mais. Procuro explicar tudo dentro da página que não haja dúvidas.
A primeira
function, “sFoco” colocar o foto no campo “txtUsuario” do form. A segunda
function “sValidarLogin” valida os campos da tela, como usuário e senha e no
final mandar os dados via POST para a página “frmLoginPersistir.asp”. A
terceira function “sSair”, tem a funcionalidade de fechar a tela do brownser. A
quarta function “s_AlterarSenha” submete para a página “frmAlterarSenha.asp”. A
quinta e última function da página chama-se “enter”, verifica se o evento do
código é igual a 13, se for, chama a function “sValidarLogin”, ou seja, se o
usuário clicar ENTER, automaticamente é chamada a function para validar o form.
O restante de
código dessa página é HTML com inputs e buttons. Todos os dados digitados serão
enviados para a próxima página.
*
frmLoginPersistir.asp (Referência 10.4)
<% Dim
vRetUsuarioPerfil Dim vRetUsuario Dim vRetPerfil Dim iLogin Dim sCoUsuario Dim sCoSenha Const
USU_NO_USUARIO_LOGIN = 0 Const
USU_NO_FUNCAO_LOGIN = 1 Const PRF_CO_PERFIL_LOGIN = 0 Const PRF_NO_PERFIL_LOGIN = 1 sCoUsuario = Request("txtUsuario") sCoSenha =
Request("txtSenha") set oSeguranca =
Server.CreateObject("CPESeguranca.clsSeguranca") vRetUsuarioPerfil =
oSeguranca.ValidarUsuario(sCoUsuario, sCoSenha) if IsArray(vRetUsuarioPerfil) then vRetUsuario
= vRetUsuarioPerfil(0) vRetPerfil
= vRetUsuarioPerfil(1) end if Session("sPerfilUsuario") = "" if IsArray(vRetUsuario) then if
IsArray(vRetPerfil) then session("sCodigoUsuario")
= sCoUsuario Session("sNomeUsuario")
= vRetUsuario(USU_NO_USUARIO_LOGIN,0) Session("sNomeFuncao")
= vRetUsuario(USU_NO_FUNCAO_LOGIN,0) Session("vRetPerfilGeral")
= vRetPerfil for
iLogin = 0 to UBound(vRetPerfil,2) Session("sPerfilUsuario")
= Session("sPerfilUsuario") &
vRetPerfil(PRF_CO_PERFIL_LOGIN,iLogin) & "§" &
vRetPerfil(PRF_NO_PERFIL_LOGIN,iLogin) & "§§" next Response.Redirect("frmPaginaPrincipal.asp") else %> <script> alert(f_Mensagem(13)); location.href
= 'frmLogin.asp'; </script> <% end if end if %> |
Referência: 10.4
Explicação:
Dentro da página
responsável pelo negócio de login, declaro algumas variáveis no início da
página ASP. (Referência 10.5).
Dim oSeguranca Dim
vRetUsuarioPerfil Dim vRetUsuario Dim vRetPerfil Dim iLogin Dim sCoUsuario Dim sCoSenha |
Referência: 10.6
Elas serão usadas
no decorrer do código.
Começam com uma
letra pequena e em seguida maiúsculo, isso porque fiz um padrão para melhor
entendimento. Segue os detalhes. (Referência 10.7)
o = é um objeto
criado, ou seja, do tipo object. |
v = é um array
ou do tipo variant usado no VB 6.0 |
i = é do tipo
inteiro |
s = é do tipo
string. |
Referência: 10.7
O próximo passo
foi declarar algumas constantes usadas especialmente para esta página, ou seja,
é melhor usar constante do que números no decorrer da página e código. Lembre-se
que as constantes declaradas são referentes ao select no banco de dados, ou
seja, a posição dos campos no select criado. Por exemplo: Select campo1, campo2
from tabela. O campo1 será a constante com o valor 0, o campo2 com o valor 1 e
assim por diante. (Referência 10.8)
Const
USU_NO_USUARIO_LOGIN = 0 Const
USU_NO_FUNCAO_LOGIN = 1 Const PRF_CO_PERFIL_LOGIN = 0 Const PRF_NO_PERFIL_LOGIN = 1 |
Referência: 10.8
Procuro sempre
colocar as constantes com letras maiúsculas.
A linha seguinte
atribui os valores enviados para as variáveis. (Referência 10.9)
sCoUsuario = Request("txtUsuario") sCoSenha =
Request("txtSenha") |
Referência: 10.9
Explicação:
Atribui a
variável sCoUsuario o valor enviado do request, o campo da página anterior
chama “txtUsuario”. Fiz da mesma forma para a variável sCoSenha, o request, o
campo da página chama “txtSenha”.
Acessando e
chamando functions diretamente do VB. (Referência 10.10)
set oSeguranca
= Server.CreateObject("CPESeguranca.clsSeguranca") vRetUsuarioPerfil
= oSeguranca.ValidarUsuario(sCoUsuario, sCoSenha) |
Referência: 10.10
Explicação:
Antes que pense “que”
código é esse. Lembre-se que em passos anteriores criei uma dll utilizando o VB
6.0 chamado “CPESeguranca” com a classe chamada “clsSeguranca”. A classe possui
alguns métodos para logar no sistema utilizando stored procedure no banco de
dados. Agora no ASP 3.0, irei chamá-la passando os parâmetros esperados.
A variável “oSeguranca”
é setada com o comando “set”, atribuo o valor
“Server.CreateObject(“CPESeguranca.clsSeguranca")” que serve para
instanciar a dll registrada junto ao COM PLUS. Instanciando dessa forma, os
métodos dessa classe estarão disponíveis a serem chamados.
A segunda linha,
o retorno do método atribui para a variável “vRetUsuarioPerfil”. Chamo da
seguinte maneira, “oSeguranca.ValidarUsuario(sCoUsuario, sCoSenha)”, ou seja, o
nome da variável anterior, ponto o nome do método passando as variáveis
atribuídas anteriormente com o valor do request enviado pela página anterior. Espero
ter entendido essa parte, caso contrário acompanhe os passos com paciência e
dedicação. A regra de negócio para validação do usuário está todo dentro do VB,
com esse método é verificado se o usuário está habilitado para entrar no
sistema ou não. Caso seja habilitado, voltará um array com as informações
necessárias de perfil e usuário, caso contrário não voltará nada.
Verificando dados
para atribuir session junto ao sistema. (Referência 10.11)
if IsArray(vRetUsuarioPerfil) then vRetUsuario
= vRetUsuarioPerfil(0) vRetPerfil
= vRetUsuarioPerfil(1) end if Session("sPerfilUsuario") = "" if
IsArray(vRetPerfil) then session("sCodigoUsuario")
= sCoUsuario Session("sNomeUsuario")
= vRetUsuario(USU_NO_USUARIO_LOGIN,0) Session("sNomeFuncao")
= vRetUsuario(USU_NO_FUNCAO_LOGIN,0) Session("vRetPerfilGeral")
= vRetPerfil for
iLogin = 0 to UBound(vRetPerfil,2) Session("sPerfilUsuario")
= Session("sPerfilUsuario") &
vRetPerfil(PRF_CO_PERFIL_LOGIN,iLogin) & "§" &
vRetPerfil(PRF_NO_PERFIL_LOGIN,iLogin) & "§§" next Response.Redirect("frmPaginaPrincipal.asp") else %> <script> alert(f_Mensagem(13)); location.href
= 'frmLogin.asp'; </script> <% end if end if %> |
Referência: 10.11
Bom antes de
qualquer coisa, o comando que verifica se possui algum array no ASP é IsArray.
As primeiras 4 linhas de código verifico se o retorno é array para atribuir os valores
a outras variáveis declaradas acima. (Referência 10.12)
if IsArray(vRetUsuarioPerfil) then vRetUsuario
= vRetUsuarioPerfil(0) vRetPerfil
= vRetUsuarioPerfil(1) end if |
Referência: 10.12
Em seguida zero a
session usada em todo sistema, isto é, atribuo o valor igual a nada (“”). Referência
10.13
Session("sPerfilUsuario") = "" |
Referência: 10.13
Todo esse código de
verificação de usuário junto ao sistema dll registrado com COM PLUS serve para
segurança de código. Até o momento, validamos o usuário que está tentando
logar, porém ainda não foram atribuídas as sessões que serão usadas. Todo o
controle será em cima de sessões atribuídas automaticamente com dados vindos do
componente VB.
if IsArray(vRetUsuario) then if
IsArray(vRetPerfil) then session("sCodigoUsuario")
= sCoUsuario Session("sNomeUsuario")
= vRetUsuario(USU_NO_USUARIO_LOGIN,0) Session("sNomeFuncao")
= vRetUsuario(USU_NO_FUNCAO_LOGIN,0) Session("vRetPerfilGeral") = vRetPerfil for
iLogin = 0 to UBound(vRetPerfil,2) Session("sPerfilUsuario")
= Session("sPerfilUsuario") &
vRetPerfil(PRF_CO_PERFIL_LOGIN,iLogin) & "§" &
vRetPerfil(PRF_NO_PERFIL_LOGIN,iLogin) & "§§" next Response.Redirect("frmPaginaPrincipal.asp") else %> <script> alert(“Usuário sem
perfil cadastrado.”); location.href = 'frmLogin.asp'; </script> <% end if else %> <script> alert(“Usuário
ou senha inválido.”); location.href = 'frmLogin.asp'; </script> <% end if |
Referência: 10.14
Explicação
(Referência 10.14)
A primeira
condição que faço é se a variável “vRetUsuario” é um array, ou seja, se os
dados que estão atribuídos a ele, é do tipo array. Se não for do tipo array,
cai na condição “else” do código. Com isso é mostrado um alerta com a mensagem:
“usuário ou senha inválido” e retorna para a tela “frmLogin.asp”.
Se for do tipo
array, faço uma outra condição que verifica se a variável “vRetPerfil”, isso
porque o sistema também possui no banco de dados o perfil do usuário que está
sendo logado. Caso usuário que estiver logando não tiver perfil cadastro no
banco de dados, será enviada a mensagem: “Usuário sem perfil cadastrado.” e
redirecionará para a página de login (“frmLogin.asp”). Sendo um array, atribuo
todas as sessões usadas no sistema aos valores retornados do componente da
seguinte forma. (Referência 10.15).
session("sCodigoUsuario")
= sCoUsuario Session("sNomeUsuario")
= vRetUsuario(USU_NO_USUARIO_LOGIN,0) Session("sNomeFuncao")
= vRetUsuario(USU_NO_FUNCAO_LOGIN,0) Session("vRetPerfilGeral")
= vRetPerfil |
Referência: 10.15
Note que alguns
valores que atribuo para a session, é uma constante declarada no início do
código da página. Depois de atribuir as sessions necessárias, redireciono para
a página principal com o comando “response.redirect”. (Referência 10.16)
Response.Redirect("frmPaginaPrincipal.asp") |
Referência: 10.16
Ilustração de
todo código mostrado anteriormente.
Tela de login do
sistema. (Referência 10.17)
Referência: 10.17
Digito usuário e
senha. (Referência 10.18)
Referência: 10.18
Cliquei no botão
logar e entrei no sistema. (Referência 10.19)
Referência: 10.19
Caso digite
usuário ou senha inválida, é mostrada uma mensagem no brownser. (Referência
10.20)
Referência: 10.20
Bom, fico por
aqui com mais um artigo. Espero ter ajudado a todos os leitores. Qualquer dúvida,
favor entrar em contato pelo e-mail: mauricio@aspneti.com
Mauricio Junior