Olá desenvolvedores, dando continuidade a implementação do Filter de autenticação, lembrando que Servlet Filter da API Servlets é um componente que intercepta uma requisição e pode executar comandos antes e depois dessa requisição ser tratada por um Servlet.
Vale ressaltar ainda que este filtro implementa a interface Filter, e entre seus métodos temos o doFilter(), que é chamado quando uma requisição é interceptada. Este método possui um parâmetro do tipo FilterChain, que representa a cadeia de filtros que está processando a requisição.
Em uma aplicação web, o uso de filtros se torna uma importante opção de implementação para as características não funcionais do sistema. Isto é, aquelas que não estão diretamente ligadas as regras de negócio.
PÁGINAS JSP
Após a implementação na página index.jsp do link que redirecionará o usuário mediante autenticação para uma página específica, precisamos criar esta página. Assim, na subpasta pages crie a página acessoAoSistema.jsp.
A ideia é fazer com a classe FlterAutenticacao intercepte apenas as páginas JSP acessoAoSistema. E para isso precisamos essencialmente mapear a página na anotação @WebFilter. E como a página esta dentro de uma pasta, o mapeamento deverá passar também por esta pasta.
@WebFilter(“/pages/acessoAoSistema.jsp”)
Agora o que precisa ser feito é implementar o processo que verificará se o usuário está logado ao tentar acessar a página acessoAoSistema. E como mencionado na parte 1 deste tutorial, se o usuário não estiver logado ele deverá ser redirecionado para uma página de login.
Entretanto, uma vez que estamos neste contexto de páginas JSP, implementaremos a página autenticar.jsp que iremos precisar um pouco mais adiante. Crie esta página na raiz da pasta WebContent.
CAPTURANDO USUÁRIO LOGADO
Então para capturar se o usuário está logado ou não, ou seja, se ele está ativo na sessão precisaremos da interface HttpServletRequest. A interface ServletRequest é quem fornece informações de solicitação para servlets HTTP.
O contêiner do servlet cria um objeto HttpServletRequest e o passa como um argumento para os métodos de serviço do servlet (doGet, doPost, doFilter entre outros). Precisaremos também primeiro converter o request.
HttpServletRequest req = (HttpServletRequest) request;
E agora é necessário promover uma forma de identificar o usuário em mais de uma solicitação de página ou visita a um site e de armazenar as informações sobre esse usuário. E para este fim que implementaremos a sessão, para quem atribuiremos o usuário.
HttpSession session = req,getSession();
Session.getAttribute("usuario");
Mas de onde está vindo este usuário? Do objeto UserLogado, porém antes de seguirmos com as implementações iremos organizar a estrutura do projeto da nossa aplicação.
Crie dentro da pasta src (source) um package filter e mova a classe FilterAuenticacao.java para dentro deste pacote. E da mesma forma crie um package user e dentro dele crie a classe UserLogado.java. Esta classe do usuário terá inicialmente apenas dois atributos, login e senha. Gere para os dois atributos os métodos Getters and Setters …
IMPLEMENTANDO O BJETO USER
DE VOLTA AO DOFILTER
E agora que temos o objeto usuário, promoveremos uma pequena alteração em uma linha de código já implementada. E, importante, é preciso fazer a conversão de casting ou cast.
Casting é a transformação de uma determinada variável de um tipo menos específico para uma variável com um tipo mais específico e vice-versa. Ou seja, é quando convertemos um valor de um tipo para outro tipo.
UserLogado userLogado = (userLogado) session.getAttribute(“usuario”);
Na primeira vez em que acessar a aplicação o usuário não estará logado, logo ele deverá ser redirecionado para a tela de login. Assim, por meio de uma estrutura de decisão, se userLogado estiver nulo o usuário que está tentando acesso a página deverá ser redirecionado. Assim, este usuário será redirecionado para a página que dará o acesso ao sistema. E faremos o redirecionamento utilizando o dispatcher.
O RequestDispatcher cumpre o objetivo de encaminhar a requisição atual para outro recurso, como um outro servlet ou página JSP, como no caso da nossa aplicação.
Mas se não, se o usuário já estiver logado no sistema, a requisição passará por fora da estrutura e vai executar o chain.doFilter(request, response).
EM POUCAS PALAVRAS
E se você subir o projeto verá que já funciona o que implementamos até aqui, mas ainda não acabou, então nos vemos na parte três deste tutorial.