Filtro está pegando TODAS as requisições

5 respostas
A

Olá, estou com um problema de filtros na minha aplicação Web, onde TODAS AS REQUISIÇÕES ESTÃO SENDO FILTRADAS. Mesmo eu explicitando que quero filtrar APENAS: “/faces/restrito”. Alguém pode me mostrar onde estou errando?

Meu web.xml:

<filter>
        <filter-name>SecurityFilter</filter-name>
        <filter-class>com.empresa.filtros.SecurityFilter</filter-class>
        <init-param>
            <param-name>ID_SISTEMA</param-name>
            <param-value>1</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>SecurityFilter</filter-name>
        <url-pattern>/faces/restrito/*</url-pattern>
    </filter-mapping>

Minha intenção é filtrar as requisições que vierem para o diretório “restrito”, de modo que eu possa verificar se o usuário possui “perfil” de acesso à URL.

Já pesquisei a net inteira, mas todos os exemplos são bem parecidos com o meu. Então acho que deveria funcionar. Será que pode ter algo a ver com o Primefaces que estou usando?

Ele a seguinte configuração:

<servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>

Agradeço qualquer ajuda!

5 Respostas

A

“/faces” é o padrão gerado pelo netbeans, a sua pasta restrita não está em /faces/restrito, e sim em /restrito/*

&lt;filter&gt;  
    &lt;filter-name&gt;SecurityFilter&lt;/filter-name&gt;  
    &lt;filter-class&gt;com.empresa.filtros.SecurityFilter&lt;/filter-class&gt;  
    &lt;init-param&gt;  
        &lt;param-name&gt;ID_SISTEMA&lt;/param-name&gt;  
        &lt;param-value&gt;1&lt;/param-value&gt;  
    &lt;/init-param&gt;  
&lt;/filter&gt;  
&lt;filter-mapping&gt;  
    &lt;filter-name&gt;SecurityFilter&lt;/filter-name&gt;  
    &lt;url-pattern&gt;/restrito/*&lt;/url-pattern&gt;  
&lt;/filter-mapping&gt;
FernandoFranzini

É só ver seu mapeamento…kkkk
Vc ta mapeando o diretório virtual do faces…

A

Obrigado pela resposta. Na verdade, “/faces” é o prefixo usado pelo Primefaces. Não tem a ver com o Netbeans, mas sim com o Primefaces. Em todo caso, isso ainda não explica o pq requisições para o “/” estão sendo redirecionadas para o meu filtro…

A

/faces não tem nada a ver com primefaces, quando você está utilizando JSF e faz um auto-config de projeto, ele automaticamente, dependendo da IDE, atribui o padrão de URL do servlet JSF como /faces, você pode inclusive trocar o /faces pelo que você quiser, por exemplo “/faces” por “*.algo”. Isso ocorre quando você cria o projeto, e não quando você importa o jar do primefaces.

Posta o seu web.xml inteiro aqui que fica mais fácil analizar

A

Obrigado pelos esclarecimentos! Realmente eu me confundi… testei a solução que vocês deram de retirar o “/faces” do caminho do filtro, mas agora está fazendo com que o sistema não peça autenticação em momento nenhum.

O filtro não é chamado nunca, pois a URL solicitada é “/faces/restrito/index.xhtml” e o filtro ficou apenas para “/restrito/*”. Se eu voltar o filtro para “/faces/restrito/*” aí volta a pedir autenticação corretamente.

A questão é que para o filtro, a URL é composta pelo “/faces”, independemente se foi o Netbeans ou o Primefaces quem adicionou esse prefixo.

Será que pode ter algo a ver com o Faces Servlet estar executando antes do filtro? Ou algo parecido?

Segue meu web.xml completo conforme vcs pediram:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Production</param-value>
    </context-param>
    <filter>
        <filter-name>SecurityFilter</filter-name>
        <filter-class>com.empresa.filtros.SecurityFilter</filter-class>
        <init-param>
            <param-name>ID_SISTEMA</param-name>
            <param-value>1</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>SecurityFilter</filter-name>
        <url-pattern>/faces/restrito/*</url-pattern>
    </filter-mapping>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>faces/restrito/index.xhtml</welcome-file>
    </welcome-file-list>
</web-app>
Criado 3 de outubro de 2011
Ultima resposta 4 de out. de 2011
Respostas 5
Participantes 3