Filter - problema com url pattern

7 respostas
D

Olá pessoal!

Estou começando com java/jsp e estou tentando controlar o acesso as minhas jsp usando filter.
Acontece que do jeito que eu configurei minha web.xml, o filter só é executado quando eu tento acessar a minha index.jsp e eu queria que este filter fosse utilizado para todas jsp’s da minha aplicação. Já procurei aqui no forum sobre filters e não achei nada especifíco a esse problema.

O meu web.xml está assim:

<filter>
        <filter-name>LoginFilter</filter-name>
        <filter-class>com.aix2.filter.FilterLoginWebGiz</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>LoginFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

Já tentei mudar a tag de um monte de jeitos, mas não consegui fazer funcionar:
/jsp/
/jsp/pasta/

…/pasta/ (assim dá erro " Invalid …/pasta/ in filter mapping")

Depois que eu mudo a url-pattern o filte não é executado nem no index.jsp.
Qual é o jeito certo de configurar a url-pattern pra aplicar o filter a todas as jsp’s?

Alguém me ajuda nessa?
ps: se eu tiver falado alguma besteira, me corrijam. :slight_smile:

7 Respostas

V

Cara, o seu web.xml está correto, o que seu Filter deveria estar fazendo? Vc já tentou debugar p/ acompanhar o processo?

Flw! :thumbup:

J

Essa tag:

&lt;url-pattern&gt;/*&lt;/url-pattern&gt;

garante que todo request vai passar pelo Filter.
verifique se não ta dando nenhum erro no console do container.

[]´s

D

Não dá nenhum erro no console quando starto a aplicação.

Seguindo o conselho do von.juliano eu coloquei um breakpoint no método doFilter pra ver se estava passando lá e descobri que meu problema é outro. O filter é executado pra todas urls que terminam com .do e não pras que terminam com .action e a url que eu estava testando termina com .action. :stuck_out_tongue:

Isso eu configuro no web.xml tb?

J

dlt:
Não dá nenhum erro no console quando starto a aplicação.

Seguindo o conselho do von.juliano eu coloquei um breakpoint no método doFilter pra ver se estava passando lá e descobri que meu problema é outro. O filter é executado pra todas urls que terminam com .do e não pras que terminam com .action e a url que eu estava testando termina com .action. :stuck_out_tongue:

Isso eu configuro no web.xml tb?


vc esta usando struts então???
bom, se quando vc chama uma url que usa .do o Filter ta sendo usado, parece que o Filter so é chamado quando a url é tratatda pelo struts.
uma solução seria trocar o mapeamendo do servlet do struts p/ .. isso vai fazer o struts tratar todos os requests e consequentemente vai passar pelo Filter.
acho que uma boa lida na documentação a respeito do ciclo de vida dso servlets/filters tambem ajudaria.

[]´s

D

Parece que é isso mesmo que você disse.
Essa aplicação que eu estou mexendo usa struts 1.3 e essa parte específica que eu estou fazendo usa struts2.

Eu procurei essa configuração que você falou no web.xml e no struts.xml e, no web.xml tentei fazer algumas alterações que deram todas errado. O problema é que tem pouco tempo que uso jsp/struts/hibernate e essa parafernália toda, então fico perdido nos xml’s :smiley:

Mas vai aí o que eu tentei fazer. No meu web.xml, na parte onde antes tinha a configuração que diz respeito aos arquivos dentro do meu diretório raiz (eu acho :P) era assim:

<servlet-mapping>
		<servlet-name>action</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>

Tendei trocar a url-pattern para . como você falou e não funcionou. Apareceu o erro
“The requested resource (/log/login.do) is not available”. Também tentei desse jeito:

<servlet-mapping>
		<servlet-name>action</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>action</servlet-name>
		<url-pattern>*.action</url-pattern>
	</servlet-mapping>

e continuei com o problema inicial, não passando pelo filter quando tento acessar as *.action…

Tem outro lugar que eu tenho que configurar??

Já dei uma olhada na documentação que você falou, talvez um pouco rápido demais, mas parece que esse tipo de problema relacionado a configuração do jeito que eu preciso eu só vou conseguir resolver em forums :stuck_out_tongue:

D

Vou tentar explicar o problema melhor:
Essa aplicação que eu tô mexendo usa struts 1 e struts2!
As coisas novas que eu to fazendo pra ela usam struts 2.

Antes já haviam feito um filter para verificar se o usuário está logado pras actions que utilizam struts1 (.do) e eu estou tentando fazer um filter que sirva para as actions que usam struts2. Eu não sei se o que estou querendo fazer é certo, mas queria que os dois filtros fossem chamados para toda action que fosse utilizada no decorrer da aplicação, seja ela struts1 ou struts2.

Até aí beleza, debugando eu vejo que está passando nos dois filters antes de chamar uma action qualquer e quando é uma action do struts1, funciona normal. Mas quando é uma action do struts2 (.action), aparece um erro do tomcat que é o seguinte:

type Status report

message /webgizonline/estagio/atividadesestagio.action

description The requested resource (/webgizonline/estagio/atividadesestagio.action) is not available.
Apache Tomcat/5.5.20

Já tentei mexer no web.xml de todos os jeitos já sugeridos e não consegui fazer funcionar.
Tô bem perdido nessa parada, qualquer ajuda é muito bem-vinda! :smiley:

D

Consegui resolver.
Implementei essa funcionalidade em outro filtro que já tava funcionando. :stuck_out_tongue:

Criado 28 de dezembro de 2007
Ultima resposta 4 de jan. de 2008
Respostas 7
Participantes 3