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() { }
}
kuchma
Março 10, 2005, 8:33pm
#2
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.
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