isaquebressy

November 4, 2015

[Aprendendo Java EE] Filters

Os filtros são interceptadores de requisições e serão chamados antes do fluxo padrão da aplicação e estes poderão ou não dar prosseguimento a este fluxo. Caso haja a necessidade da utilização de mais de um filtro, uma cadeia de filtro pode ser utilizada, sendo que cada filtro executa e pode chamar o próximo para que seja executado.

Para criar um filtro, deve-se declarar uma classe que implementa Filter (javax.servlet), com os métodos init, destroy e doFilter. Este último recebe uma cadeia de filtros FilterChain (javax.servlet) e é através desta que um filtro chama o próximo para executar, dando prosseguimento à seqüência de execução.

public class MyFilter implements Filter {

    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
            throws IOException, ServletException {
        chain.doFilter(req, resp);
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
    }

}

O método doFilter do FilterChain dá prosseguimento à cadeia, chamando o próximo filtro ou a aplicação.
Para o filtro executar, devemos mapear quais urls ele irá interceptar. Fazemos isso como nas Servlets, declarando e mapeando os filtros no web.xml ou usando anotações.

  1. Mapeando em web.xml:
Primeiramente, define-se o filtro com o seu nome e sua classe, usando a tag <filter>
. Depois, mapeia-se o padrão da url utilizando o nome definido anteriormente.
  

<filter><filter-name>meuFiltro</filter-name><filter-class>my.project.package.filtro.MeuFiltro</filter-class></filter>


  <filter-mapping><filter-name>meuFiltro</filter-name><url-pattern>/*</url-pattern></filter-mapping>
  1. Através da anotação na classe:
Usa-se a anotação @WebFilter (javax.servlet.annotation) para informar que a classe é uma servlet. 
O padrão da url é definido utilizando-se o parâmetro urlPatterns.


@WebFilter(urlPatterns = "/url")public class ServletClass extends HttpServlet {

Para o filtro ser executado em qualquer requisição o mapeamento deve ser feito usando a url “/*”


Category: java learning

Tags: java language programming


# Back