Invocando Métodos

Estou lendo um livro chamado Writing Secure Code, e na seção onde aborda como escrever código .NET seguro, o autor usa uma forma de chamar métodos da instância de uma determinada classe de uma forma que eu ainda não conhecia. Achei mesmo muito interessante. Abaixo o exemplo:

          public class InstanceTest{
                    public void Show(string p){
                              MessageBox.Show(p);
                    }
          }

Acima uma classe simples com um método. Como disse, o interessante é a forma com qual o método é invocado:

          private void Form1_Load(…){
                    new InstanceTest().Show(“Test”);
          }

Como podemos ver, logo após instanciarmos a classe, já conseguimos acessar os métodos de instância deste objeto. Tenho que confessar que isso é uma novidade para mim. Fui tentar fazer o mesmo no Visual Basic .NET, mas não resultou. 😦

Restringindo Arquivos – FormsAuthentication

Hoje estive que disponibilizar em um área restrita da empresa que trabalho um arquivo PDF para que os usuários que tem acesso a esta área do website possam baixá-lo. Criei um subdiretório dentro da pasta que está restringinda no arquivo Web.Config. Até aí estava tudo certo, até quando tentei chamar o arquivo PDF diretamente na URL do browser.

Imaginava eu, que pelo fato de estar dentro do diretório que é restrito o mesmo também seria e me enganei. Antes de ir mais além, eu criei uma classe/handler onde a mesma implementava a interface IHttpHandler e ali verificava se o usuário estava ou não autenticado. Em seguida fiz as entradas no arquivo Web.Config incluindo os elementos de httpHandlers, mapeando assim o arquivo PDF.

Da mesma forma o problema ainda persistia e eu continuava sem entender. Dando uma palavra com o meu amigo João, ele me deu uma luz, onde disse que como arquivos com extensões *.pdf não passam pelo ASP.NET, ou melhor, não estão mapeados dentro do IIS, logo, não seria possível validar a autenticação antes de exibir o arquivo ao usuário.

Resumindo, o que tive que fazer foi apenas fazer o mapping para arquivos PDF dentro do IIS para que o filtro ISAPI (aspnet_isapi.dll) passe a fazer as verificações dos mesmos antes de exibí-los. Como associamos o ASP.NET à arquivos PDFs, isso já é o necessário. Não é mais necessário a criação de um Handler específico e fazer as entradas de mappings dentro do arquivo Web.Config, que como já disse acima, se não estiver associado ao ASP.NET, não irá adiantar nada. Se lermos a documentação temos:

Please note that Microsoft Internet Information Services (IIS) has its own concept of mapping extensions to ISAPIs. For the settings for a given extension in this section to take effect, the extension must be mapped in IIS to ASP.NET ISAPI. For nonstandard extensions (something other than .aspx, .asmx, .asax, and so on), the user must configure IIS.

Pois bem, abaixo a imagem ilustra como fazermos para criar uma nova entrada (mapping) dentro do IIS para que o ASP.NET passe também a gerí-los:

Para chegar até esta tela, clique com o botão direito em cima do site dentro do IIS, vá até Propriedades, depois em Home Directory, em seguida em Configuration e finalmente clique em Add para fazer um novo mapping. Este processo deve ser igual para todos os arquivos que desejar fazer o mesmo.