ASP .NET - Acesso seguro com download de arquivos na web
O objetivo deste artigo é mostrar como criar uma aplicação ASP .NET que tenha as seguintes funcionalidades:
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 esta 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 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;
Esta página Default.aspx será usada como a página de Login do site. (eu poderia ter dado o nome de Login.aspx a esta 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 nesta 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:
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 eu 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:
Para executar as consultas clique no botão ! Execute;
Create DataBase Acesso use Acesso CREATE TABLE [dbo].[Log_Usuarios] ( [Logid] [int] IDENTITY(100,1)PRIMARY KEY NOT NULL, [nome] [varchar](55) NOT NULL, [senha][varchar](55), [horaLogin] [datetime] NOT NULL, [hotaLogout] [datetime] NOT NULL, [Status] [int] NOT NULL, [DataLogin] [datetime] NOT NULL, [email] [varchar](55) NOT NULL ) |
A seguir vamos incluir dois registros na tabela Log_Usuarios executando as instruções abaixo :
insert into dbo.Log_Usuarios values('Macoratti','numsey',GETDATE(),'02/07/2010',1,GETDATE(),'macoratti@yahoo.com') insert into dbo.Log_Usuarios values('Jessica','123456',GETDATE(),'02/09/2010',1,GETDATE(),'jessica@teste.com') |
Ao final a 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] ( @usuario VarChar(50), @password varChar(50), @resultado int OUTPUT ) AS set @resultado = (SELECT count(*) FROM Log_Usuarios WHERE nome = @usuario And senha = @password) select case @resultado when 1 then 1 --Login esta Correto else 0 -- Login incorreto end |
Nesta stored procedure estamos contando os registros que coincidem com os valores de usuário e se senha informados na página de login, e, se existir um registro que coincida com as credencias informadas, então temos que o login esta 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 nomeUsuario As [String], ByVal senhaUsuario As [String]) As Integer Dim strConn = "Data Source=.\SQLEXPRESS;Initial Catalog=Acesso;Integrated Security=True" Dim con As New SqlConnection(strConn) Dim cmdselect As New SqlCommand() cmdselect.CommandType = CommandType.StoredProcedure cmdselect.CommandText = "[dbo].[spLoginv]" cmdselect.Parameters.Add("@usuario", SqlDbType.VarChar, 50).Value = nomeUsuario cmdselect.Parameters.Add("@password", SqlDbType.VarChar, 50).Value = senhaUsuario cmdselect.Parameters.Add("@resultado", SqlDbType.Int, 4) cmdselect.Parameters("@resultado").Direction = ParameterDirection.Output cmdselect.Connection = con Dim Retorno As Integer = 0 Try con.Open() cmdselect.ExecuteNonQuery() Retorno = CInt(cmdselect.Parameters("@resultado").Value) Catch ex As SqlException lblaviso.Text = ex.Message Finally cmdselect.Dispose() If con IsNot Nothing Then con.Close() End If End Try Return Retorno End Function |
Esta função define a string e 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 esqueça 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 Dim Resultado As Integer = 0 If txtUsuario.Text <> "" AndAlso txtSenha.Text <> "" Then Resultado = Valida_Login(txtUsuario.Text, txtSenha.Text) Else lblaviso.Text = "Informe o nome e a senha corretos." End If If Resultado = 1 Then lblaviso.Text = "acesso concedido" Response.Redirect("Download.aspx") Else lblaviso.Text = "Login inválido" End If End Sub |
Este 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 vamos exibir na página de download os arquivos para download e definir o código para realizar o download do arquivo selecionado.
Aguarde a continuação do artigo: ASP .NET - Acesso seguro com download de arquivos na web - 2
Eu sei é apenas ASP .NET, mas eu gosto.
Simples, simples assim...
Referências: