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.