Problema pra usar Filter em Servlet

Olá !

Estou querendo usar um filtro para verificar um session antes do usuário acessar o servlet, já crieir a class implementei o Filter e cadastrei o Filter criado no web.xml, como um exemplo da sun (e diversos outros), mas não funciona quando acesso o Servlet ele não passa pelo filter vai direto pro servler, alguem sabe o pq ?

Segue abaixo os códigos:

• web.xml

	<filter>
		<filter-name>FiltroInicializar</filter-name>
		<filter-class>br.dir.servlet.FiltroInicializar</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>FiltroInicializar</filter-name>
		<servlet-name>Inicializar</servlet-name>
	</filter-mapping>

	<servlet>
		<servlet-name>Inicializar</servlet-name>
		<servlet-class>br.dir.servlet.Inicializar</servlet-class>
	</servlet>

• FiltroInicializar:

package br.dir.servlet;

import java.io.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class FiltroInicializarChat implements Filter	{


	public void init(FilterConfig config) throws ServletException {	}

	public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
		 throws IOException, ServletException {
		
		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) res;
		
		String tipoEntrada = request.getParameter("tipoEntrada");
        
		if (tipoEntrada.equals("logado") == true)	{
			if (request.getSession(true).getAttribute("carregado") != null)	{
			response.sendRedirect("index2.jsp");
			}
       		 }

	}

	public void destroy() {	}

}

Como voce acessa o servlet (direto, forward, etc)? Com que URL voce acessa o servlet (pode ser que esteja chegando ao servlet por outro mapeamento que o filtro nao pega)? Teu container suporta filtros? Outra coisa a ser verificada eh se nao da algum erro na inicializacao do filtro quando o container sobe. :smiley:

Marcio Kuchma

Coloque algumas mensagens no log do tomcat para ver se o filtro está funcionando legal.

No método init do seu filtro, vc faz o seguinte:

[code] …
private ServletContext context = null;

public void init(FilterConfig config) throws ServletException {
    context = config.getServletContext();
    context.log("FILTRO: Inicializando"); 		
}

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    ...
    context.log("FILTRO: Filtrando"); 		

    //executo meu servlet
    chain.doFilter( req, res );

    context.log("FILTRO: Filtrado"); 		
    ...
}

public void destroy() {
    context.log("FILTRO: finalizando"); 		
    context = null;
}

...[/code]

Falow!

Valeu, estarei fazendo essess testes recomendados amanhã, e posto aqui o resultado, por enquanto já valeram as dicas, vamos ver no q vai dar !

[]s

Coloquei os context.log(), mas realmente o filtro não está sendo executado, pois não é mostrado nada no log.

O acesso eu faço pela url para o servlet: http://…/br.dir.servlet.Inicializar

Alguem tem alguma sugestão do q possa ser ?

[]s

Faz um favor, primeiro crie um mapeamento para seu Servlet.

E ae Daniel,

como assim um mapeamento ? poderia explicar melhor ?

[]s

Aluno preguiçoso. Não leu a apostila que te passei, né!

hahahah :lol:

<servlet-mapping>
    <servlet-name>Inicializar</servlet-name>
    <url-pattern>/servlet/br/dir/servlet/Inicializar</url-pattern>
</servlet-mapping>

certo ?

Porque não simplifica para algo como

<url-pattern>/Inicializar</url-pattern>

???

Estou usando esse servlet na LocaWeb, e com ele usando somente:

<url-pattern>/Inicializar</url-pattern>

Não funciona, pelo menos não funcionava, então coloquei o caminho mais completo e ai rolou.

Eles indicam usar /servlets/ antes?

Indicam não se não colocar o servlet não é reconhecido.

Podem para de pensar !

Consegui descobrir o erro hehehehe !

Seguinte oque estava ocorrendo é que como é usado no web.xml existia mais de um servlet e eu estava colocando o filter perto do “seu” servlet, e descobri que o filter tem que ficar no topo antes de todos os servlets !

Valeu pela ajuda !

[]s