Olá desenvolvedores, na parte três deste tutorial filter de autenticação do usuário, quando o login foi validado criamos um projeto e o colocamos em sessão e então o redirecionamos. Quando o redirecionamos, o filter foi novamente chamado fazendo mais uma vez a validação e assim foi confirmada e validada as credenciais do usuário.
Mas vale ressaltar que não é preciso implementar um filter para cada página, assim, trabalharemos então com parâmetro passando de uma forma genérica. E é o que iremos fazer neste tutorial. Teremos apenas um filter funcionando para todos, e neste caso, precisaremos estabelecer alguns padrões.
FILTER GENÉRICO
Então vamos lá. Não há necessidade de estar logado para acessar as páginas autenticação e index.jsp. Porém somente estando logado será possível acessar as páginas acessoAoSistema e capturarExcecoes.jsp.
E por que isso é importante? Porque assim poderemos mapear para a interceptação do filter todas as páginas que estiverem dentro da subpasta “pages”. Com isso o mapeamento não apontará mais para uma página específica, mas para todas as páginas dentro de “page”. E faremos isso com um asterisco.
@WebFilter(urlPatterns={“/pages/*”})
Mas não é só isso. Como saber qual página o usuário está tentando acessar? Fazendo um request para pegar o caminho da página que está sendo acessada. Este caminho será passado para uma variável. Faremos isso no doFilter do FilterAutenticacao, logo após abrirmos a sessão, mas antes de colocar o usuário nela.
String urlParaAutenticar = req.getServletPath();
Então, se existe a necessidade de autenticação é preciso informar a tela de autenticação a url da página que será acessada para que o redirecionamento seja feito.
Assim, se o usuário não estiver logado, isto é, se userLogado for igual a nulo, e a urlParaAutenticar for diferente da tela de login o caminho da página será passado por parâmetro para o redirecionamento.
E na página JSP, autenticar, implementaremos um campo oculto, cujo valor iremos requisitar via JSP. O que deixará o campo oculto é o atributo.
Assim, utilizaremos o parâmetro do id no doPost da ServletAutenticacao onde pegamos os dados do usuário para proceder com a validação, tal como fizemos com o login e senha.
String url = request.getParameter(“senha”);
Dessa forma se o login foi autenticado com sucesso o caminho que iremos informar para o redirecionamento não mais será /pages/acessoAoSistem.jsp, mas apenas a url.
ANOTAÇÃO
Um importante adendo para um correto redirecionamento é adicionar o pages ao caminho no mapeamento na anotação @WebServlet, na Servlet de autenticação, porque o caminho completo é o que está sendo enviado para o filter.
@WebServlet (“/pages/ServletAutenticacao”)
EM POUCAS PALAVRAS
Então a grande dica deste tutorial é trabalhar com o filter de forma genérica o que possibilita um projeto mais enxuto, visto que dessa forma não é preciso a criação de um filter para cada autenticação necessária. Eu fico por aqui e nós nos vemos no próximo tutorial.