Dev (Back & Front)ARTIGO

ASP .NET – Acesso seguro com download de arquivos na web – Parte 01

O objetivo deste artigo é
mostrar como criar uma aplicação ASP .NET que tenha as
seguintes funcionalidades:

  • Permitir o acesso
    seguro a uma página de um web site realizando a
    autenticação do usuário;
  • Exibir os arquivos
    passíveis de download do site ao usuário autorizado;
  • Efetuar o download do
    arquivo selecionado pelo usuário;

Um possível cenário para
este estudo é aquele no qual você informa uma URL a um usuário
previamente cadastrado e quando ele acessa a URL é apresentada
uma página de Login que irá verificar a autenticação do
usuário. Se o login for feito com sucesso, é apresentada uma
página com uma relação de arquivos para download, e o usuário
escolhe um arquivo e efetua o download do mesmo.

Para criar essa solução,
eu vou usar as seguintes ferramentas:

Abra o VWD 2010 Express e crie um novo web site clicando no
link New Web Site… ou no menu File
-> New Web Site
;

Nota:
Você sabe qual a diferença entre criar um um New Web Site e
criar New Project?

A seguir, selecione a
linguagem Visual Basic (você pode escolher C# também),
o template ASP .NET Empty Web Site, informe o
nome acessoSeguroComDownload e clique em OK.

Como vamos criar um web site
vazio, temos que incluir uma nova página (um WebForm) no projeto
através do menu WebSite->Add New Item, selecione o template WebForm e aceite o nome padrão Default.aspx.

A Default.aspx
será usada como a página de Login do site. (eu poderia ter
dado o nome de Login.aspx a essa página.)

Vamos aproveitar e incluir
também uma outra página chamada Download.aspx da
mesma forma. Essa página será usada para exibir os arquivos
para donwload.

Vamos, então, definir nessa
página os controles para solicitar que o usuário informe o
login (nome do usuário) e a sua senha previamente cadastrada.

No menu Table->Insert
Table, inclua uma tabela com 5 linhas e 2 colunas e inclua na
página os seguintes controles:

  • 2
    Controles TextBox : ID=txtUsuario ; ID=txtSenha
    TextMode=Password
  • 2
    Controles Button : ID= btnLogin e ID=btnCancela
  • 1
    Controle Label : ID=lblaviso

Conforme o leiaute abaixo:

Como já deu para perceber, o
usuário terá que informar um nome de login e a senha
previamente cadastrados. Portanto, temos que ter essas
informações persistidas em algum lugar: um arquivo xml, um
arquivo texto, um banco de dados etc.

No nosso exemplo, vou criar um
banco de dados para armazenar as informações do usuário. Para
criar o banco de dados, vou usar a ferramenta SQL Server
Management Studio Express.

Abra o SQL Server Management
Studio
e clique na opção New Query
para executar as seguintes consultas:

  1. Criar o banco de dados Acesso :
    Create DataBase Acesso
  2. Criar a tabela Log_Usuarios
    : Create TABLE [dbo].[Log_Usuarios]

Para executar as consultas,
clique no botão ! Execute;

Create DataBase Acesso<br /><br />use Acesso<br /><br />CREATE TABLE [dbo].[Log_Usuarios]<br />(<br />[Logid] [int] IDENTITY(100,1)PRIMARY KEY NOT NULL,<br />[nome] [varchar](55) NOT NULL,<br />[senha][varchar](55),<br />[horaLogin] [datetime] NOT NULL,<br />[hotaLogout] [datetime] NOT NULL,<br />[Status] [int] NOT NULL,<br />[DataLogin] [datetime] NOT NULL,<br />[email] [varchar](55) NOT NULL<br />)

A seguir, vamos incluir dois
registros na tabela Log_Usuarios executando as
instruções abaixo :

  • Macoratti senha numsey;
  • Jessica senha 123456;
insert into dbo.Log_Usuarios values('Macoratti','numsey',GETDATE(),'02/07/2010',1,GETDATE(),'macoratti@yahoo.com')<br />insert into dbo.Log_Usuarios values('Jessica','123456',GETDATE(),'02/09/2010',1,GETDATE(),'jessica@teste.com')

Ao final, nossa tabela
deverá exibir os seguintes registros:

Pronto, já temos o nosso
banco de dados Acesso e nossa tabela Log_Usuarios
prontas e com dois usuários cadastrados.

Agora vamos usar uma stored
procedure spLoginv que irá validar o login e
retornar um valor inteiro:

Create Proc [dbo].[spLoginv]<br />(<br />@usuario VarChar(50), <br />@password varChar(50),<br />@resultado int OUTPUT<br />)<br />AS<br />set @resultado = (SELECT count(*) FROM Log_Usuarios<br />WHERE nome = @usuario And senha = @password)<br />select case @resultado<br />when 1 then 1 --Login esta Correto<br />else<br />0 -- Login incorreto<br />end 

Nessa stored procedure estamos
contando os registros que coincidem com os valores de usuário e de senha informados na página de login e, se existir um
registro que coincida com as credencias informadas, então temos
que o login está correto; se não houver nenhum registro que
coincida com as credenciais informadas, será retornado o valor
zero.

Na figura abaixo, temos a
criação da stored procedure no SQL Server Management
Studio
:

Agora temos que criar uma
função que vai usar a stored procedure spLoginv
chamando-a no evento Click do botão Login
verificando o retorno obtido e tratando o resultado.

Abra o arquivo code-behind
do arquivo Default.aspx.vb vamos definir a
função Valida_Login cujo código é o
seguinte:

 Public Function Valida_Login(ByVal <strong>nomeUsuario</strong> As [String], ByVal <strong>senhaUsuario</strong> As [String]) As Integer<br /><br />        Dim strConn = <strong>"Data Source=.\SQLEXPRESS;Initial Catalog=Acesso;Integrated Security=True"</strong><br /><br />        Dim con As New SqlConnection(strConn)<br />        Dim cmdselect As New SqlCommand()<br /><br /><strong>   cmdselect.CommandType = CommandType.StoredProcedure</strong><br /><strong>cmdselect.CommandText = "[dbo].[spLoginv]"</strong><br /><br />        cmdselect.Parameters.Add("@usuario", SqlDbType.VarChar, 50).Value = nomeUsuario<br />        cmdselect.Parameters.Add("@password", SqlDbType.VarChar, 50).Value = senhaUsuario<br />        cmdselect.Parameters.Add("@resultado", SqlDbType.Int, 4)<br />        cmdselect.Parameters("@resultado").Direction = ParameterDirection.Output<br />        cmdselect.Connection = con<br /><br />        Dim Retorno As Integer = 0<br />        Try<br />            con.Open()<br />            cmdselect.ExecuteNonQuery()<br />            Retorno = CInt(cmdselect.Parameters("@resultado").Value)<br />        Catch ex As SqlException<br />            lblaviso.Text = ex.Message<br />        Finally<br />            cmdselect.Dispose()<br />            If con IsNot Nothing Then<br />                con.Close()<br />            End If<br />        End Try<br />        Return Retorno<br />    End Function

Essa função define a string e
a conexão com o banco de dados (seria melhor que ela fosse
obtida do arquivo web.config, não é mesmo???).

A seguir a função define a stored
procedure que vai usar, spLoginv, e, os
parâmetros recebidos: nomeUsuario e senhaUsuario.

A função executa a stored
procedure e retorna o valor retornado pelo resultado da
execução: zero ou um.

Não se esqueça de definir no início do
arquivo os namespaces para acessar as classes ADO .NET.

  • Imports System.Data
  • Imports System.Data.SqlClient

No evento Click do
botão Login vamos incluir o código que vai
usar a função Valida_Login:

 Protected Sub btnLogin_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnLogin.Click<br /><br />        Dim Resultado As Integer = 0<br /><br />         If txtUsuario.Text <> "" AndAlso txtSenha.Text <> "" Then<br />            Resultado = <strong>Valida_Login(txtUsuario.Text, txtSenha.Text)</strong><br />        Else<br />            lblaviso.Text = "Informe o nome e a senha corretos."<br />        End If<br /><strong>If Resultado = 1 Then</strong><br />             lblaviso.Text = "acesso concedido"<br /><strong>  Response.Redirect("Download.aspx")</strong><br />        Else<br />            lblaviso.Text = "Login inválido"<br />        End If<br />    End Sub

Esse código utiliza a função Valida_Login()
passando o nome e senha do usuário e obtendo o
retorno da stored procedure que criamos.

Se o resultado for igual a 1, então
o usuário é valido e estamos redirecionando-o para a página
Download.aspx
que criamos no início do artigo.

Executando a aplicação temos
abaixo a página Default.aspx solicitando o nome
e a senha do usuário.

Dessa forma criamos o banco de
dados, a stored procedure e a página de login. Na segunda parte
deste artigo, na próxima semana, vamos exibir na página de download os arquivos para
download e definir o código para realizar o download do arquivo
selecionado.

Eu sei, é apenas ASP .NET,
mas eu gosto.

Simples, simples assim…

é referência em Visual Basic no Brasil e autor dos livros "Aprenda Rápido: ASP" e "ASP, ADO e Banco de Dados na Internet". Mantenedor do site macoratti.net.

Ver perfil