Filtros globais no JBoss EAP 6

Uma funcionalidade bastante usada no JBoss 5 é a capacidade de adicionar filtros (listeners, servlets, etc.) globais. Por exemplo, para toda aplicação .war instalada, devem ter um filtro de segurança. Esse filtro é adicionado direto no JBoss, de maneira que a aplicação não tem escolha se usa ou não. No JBoss 5 é usado o arquivo deployers/jbossweb.deployer/web.xml para configuração destes parâmetros.

No JBoss EAP 6 (ou AS 7), não existe esse arquivo deployers/jbossweb.deployer/web.xml. Então veja uma solução alternativa e java puro para adicionar filtros globais.

Implementação da interface ServletContainerInitializer

public class ServletFilterConfigurator implements ServletContainerInitializer {

    public void onStartup(Set<Class<?>> c, ServletContext ctx) throws ServletException {
        System.out.println(">>>>>>>>>>>>>> registering filter for " + ctx.getContextPath());
        FilterRegistration fReg = ctx.addFilter("myGlobalFilter", com.claudius.MyGlobalFilter.class);
        fReg.addMappingForUrlPatterns(null, true, "/*");
    }

}

Ativação da classe, criar um arquivo META-INF/services/javax.servlet.ServletContainerInitializer, cujo conteúdo é FQCN acima.

com.claudius.ServletFilterConfigurator

Isso serve para quando o servlet container, carregar o .jar, invocar a classe do serviço.

No lado do JBoss EAP 6, crie um módulo estático e no domain.xml declare-o como módulo global, desta maneira este módulo é automaticamente carregado para todas as aplicações.

Veja um projeto que mostra o filtro global em funcionamento.

 

Deixe um comentário