Filtro não funciona

8 respostas
rafagil

Olá pessoal, estou com um problema para configurar um filtro. Fiz tudo certinho (eu acho), poém o filtro não é executado. No filtro (segue o web.xml abaixo) uso o nome do servlet ao invés de usar url-mapping, se eu usar url-mapping com “/*” funciona, mas eu quero fazer pelo nome do servlet (já tentei usar *.html mas não funcionou também). Estou fazendo algo errado? (Usando o Tomcat 5.5)

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
	xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

	<display-name>BR-Groupware</display-name>

    <servlet>
        <servlet-name>brgroupware</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>brgroupware</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>ajax</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>ajax</servlet-name>
        <url-pattern>/ajax/*</url-pattern>
    </servlet-mapping>

	<!-- Filtros -->

    <filter>
        <filter-name>UserFilter</filter-name>
        <filter-class>filters.UserFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>UserFilter</filter-name>
		<servlet-name>brgroupware</servlet-name>
    </filter-mapping>

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

Valew

8 Respostas

Giulliano

não seria /filtra/*

e tudo o que vc chamar através da url funcionaria ??

pelo menos procurei no google e em menos de 30 segundos eu achei mil exemplos…

rafagil

não, eu quero que filtre tudo que for .html, se eu colocar / funciona, mas filtra tudo :(. Por isso tentei usar o nome do servlet. Mas ainda não funciona.

Giulliano

tenta implementar isso no seu filtro

CharResponseWrapper wrapper = new CharResponseWrapper(
   (HttpServletResponse)response);

chain.doFilter(request, wrapper);
if(wrapper.getContentType().equals("text/html")) {
  //TO DO 
}

//fonte    http://java.sun.com/products/servlet/Filters.html
rafagil

Fazendo o filtro acima, eu continuaria enviando todos os requests pra ele, e eu não quero.

Mas olha que interessante, se eu alterar o pattern do servlet para usar “/actions/*” por exemplo, funciona :shock: . E eu consigo colocar o filtro por servlet-name. O único problema, é que tenho que mudar todos os links e javascripts da minha aplicação :frowning:

Gostaria de saber porque *.html não funciona

ddduran

kra o seu *.html esta indo para uma servlet não para seu filtro.

faltou você colocar o url-pattern pro seu filtro, direto sem passar por essa servet.

não entendi o que você quer fazer passando o nome do serlvet… queria copiar o padrão que está pro servlet?
cuidado não pode haver padrões de url duplicados

UserFilter /*
rafagil

quero que tudo que passar pelo servlet, passe antes pelo filtro. Funciona muito bem se eu usar algum pattern como “/algo/*”, mas se eu colocar o pattern .html no servlet, o filtro é simplesmente ignorado. Se eu usar o mesmo pattern no filtro e no servlet não funciona tbm (.html)

olha soh: Esse funciona:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
	xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

	<display-name>BR-Groupware</display-name>

    <servlet>
        <servlet-name>brgroupware</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 	    <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>brgroupware</servlet-name>
        <url-pattern>/actions/*</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>ajax</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>ajax</servlet-name>
        <url-pattern>/ajax/*</url-pattern>
    </servlet-mapping>

	<!-- Filtros -->

    <filter>
        <filter-name>UserFilter</filter-name>
        <filter-class>filters.UserFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>UserFilter</filter-name>
		<servlet-name>brgroupware</servlet-name>
    </filter-mapping>

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>
ddduran

A nesse caso por tratar de um Filter e uma Servlet você pode por o mesmo pattern pros dois.

<servlet-mapping>   
        <servlet-name>brgroupware</servlet-name>   
        <url-pattern>*.html</url-pattern>   
    </servlet-mapping> 

    <filter-mapping>   
        <filter-name>UserFilter</filter-name>   
        <url-pattern>*.html</url-pattern>    
    </filter-mapping>

Já tentou?

rafagil

Já tentei, mas também não funciona.

Vou mudar todos os links mesmo, pra usar outro tipo de url, pq preciso entregar o projeto ateh sexta. Mas fiquei curioso pra saber porque não funciona com o pattern *.html

Obrigado a todos pela ajuda!

Criado 16 de outubro de 2007
Ultima resposta 17 de out. de 2007
Respostas 8
Participantes 3