Filtro de login impede o carregamento do css da página, JSF [Resolvido]

Boa tarde a todos companheiros, procurei aqui no fórum algum post com um problema semelhante ao meu porém não encontrei, portanto aí vai meu problema:

Estou desenvolvendo um sistema utilizando JSF 2 e tomcat, fiz um filtro de login que funciona corretamente, porém com este filtro ativo as páginas são carregadas sem o css.

Este é o código do filtro, lembrado que quando eu comento a anotação WebFilter o filtro deixa de funcionar e o css das páginas é carregado adequadamente…


@WebFilter(filterName = "LoginFilter", servletNames={"Faces Servlet"})
public class LoginFilter implements Filter {

    private FilterConfig filterConfig;

    public LoginFilter() {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain)
            throws IOException, ServletException {

        log("Entrou no filtro de login");

        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpSession session = httpRequest.getSession();
        log("Sessão: " + session);
        
        if (session.getAttribute("usuarioLogado") != null
                || httpRequest.getRequestURI().endsWith("login.xhtml")) {
            chain.doFilter(request, response);
        } else {
            log("Usuário não logado, redirecionando para " + httpRequest.getContextPath() + "/Login/login.xhtml");

            HttpServletResponse httpResponse = (HttpServletResponse) response;
            httpResponse.sendRedirect("Login/login.xhtml");
        }

        log("Saiu no filtro de login");
    }

    @Override
    public void init(FilterConfig config) throws ServletException {
        this.filterConfig = config;
        if (filterConfig != null) {
            log("LoginFilter:Initializing filter");
        }
    }

    @Override
    public void destroy() {
    }

    public void log(String msg) {
        filterConfig.getServletContext().log(msg);
    }
}

Alguém aí já passou por algo parecido?

Sugestão

Com o filtro ativo (pág sem css)

Para interceptar problemas CSS, procure o uso do firebug (firefox). Com ele você consegue interceptar a página html criada pela framework. Dentro da interceptação, você pode ‘caçar’ a instrução para ver se, por exemplo, o href esteja incorreto.

Então eu olhei o fonte da página no browser, daí aparece aparece o link do css, quando eu clico nele para abrir em outra aba aparece uma página do tomcat com o erro 404(Not found) ao invés de aparecer meu css…

O mesmo acontece com os arquivos css e javascript utilizados pelo primefaces…

Eu já passei por isso. Eu lembro que fiz assim. Dentro do diretório raiz da aplicação web eu criei um diretório chamado pages onde eu coloquei todas as páginas do sistema, menos a página de login, e eu fiz o mapeamento do filtro assim:

loginfilter

/pages/*

REQUEST

FORWARD

INCLUDE

ERROR

Asssim, para requisições a recursos estáticos, como imagens, css, etc, a requisição não passa pelo filtro (ou seja, o filtro apenas age para os arquivos que estão dentro da pasta pages)

para casos em que eu queira deixar algo “aberto” mesmo se este recurso esteja dentro do mapeamento do filtro, eu criei um parâmetro de inicialização do filtro para os recursos que ele deve deixar aberto:

Login Filter

loginfilter

br.com.ae.core.commons.web.filter.FilterLogin

Lista de caminhos que o filtro não barra. Deve ser separada por virgulas

OPENED_RESOURCES

/mail/

no exemplo acima, mesmo que uma requisição como http://app/pages/mail seja enviada, o filtro detecta que é um recurso “aberto”, e deixa a requisição passar normalmente. No código do filtro eu verifico a existência deste parâmetro e comparo a url enviada para saber se ela está dentro da lista de caminhos “abertos” para o filtro. No seu caso, acredito que mapear o filtro para um caminho, como no primeiro exemplo, ao invés de mapear diretamente para o servlet, seja mais fácil.

Até mais.

Entendi a idéia, vou testar a solução proposta… obrigado!

rogeriopaguilar, testei a sua solução e deu certinho!! muito obrigado!

Obrigado rogeriopaguilar também estava o mesmo problema até achar esta thread aqui no GUJ. :-o