Dúvida sobre doFilter (cabeluda), oque este Filter está fazendo?

1 resposta
vanilton.coelho

Pessoal, estou com um problema muito grande, estou dando manutenção em um sistema aqui e descobri que tem uma classe filter que é tipo um cerebro do sistema, encaminhando e organizando varias coisas pegando as requisições e fazendo os encaminhamentos, só que não entendo nada de filter e gostaria de saber oque esse negocio está realmente fazendo ???? os códigos estão logo abaixo.

public final class MyFilter implements Filter {

	public void init(final FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
	}

	public void doFilter(final ServletRequest arg0, final ServletResponse arg1, final FilterChain chain) throws IOException, ServletException {
		
		HttpServletRequest request=(HttpServletRequest)arg0;
		HttpServletResponse response=(HttpServletResponse)arg1;
		
		String uri=request.getRequestURI();
		
		String secao = uri.substring(uri.indexOf("/")+1, uri.lastIndexOf("/"));
		String pagina = uri.substring(request.getRequestURI().lastIndexOf("/")+1);
		
		Integer grupoId = MinhasConstantes.MAPA_GRUPOS_INVERSO.get(secao);
		
		MeusUtil.setGrupoAnuncioPesquisa(request, grupoId);
		MeusUtil.controleNavegacaoListagem(request, pagina);
		
		if(pagina.equals("index.jsf")){
			
			if (!TSUtil.isEmpty(grupoId)) {
				request.getRequestDispatcher(uri+"?grupoId="+grupoId).forward(request, response);
			} else {
				chain.doFilter(request, response);
			}
	        
		}else{
			
			chain.doFilter(request, response);
		}

		gerenciaBreadCrump(request, secao, pagina);
	}

	private void gerenciaBreadCrump(HttpServletRequest request, String secao, String pagina) {
		
		if(!pagina.equals("detalhe.jsf")){
			MeusUtil.limpaBreadCrumpHome(request);
			MeusUtil.limpaBreadCrumpListagem(request);
		}

		if(pagina.equals("index.jsf")){
			
			MeusUtil.setBreadCrumpHome(secao, request);
		}
		
		if(pagina.equals("listagem.jsf")){
			
			MeusUtil.setBreadCrumpListagem(secao, request);
		}
	}

	public void destroy() {
		// TODO Auto-generated method stub
		
	}
	

}
public static final Map<String, Integer> MAPA_GRUPOS_INVERSO = new HashMap<String, Integer>();
	
	static {
		MAPA_GRUPOS_INVERSO.put("festas", 1);
		MAPA_GRUPOS_INVERSO.put("noticias", 2);
		MAPA_GRUPOS_INVERSO.put("baladeiros", 3);
		MAPA_GRUPOS_INVERSO.put("carnaval", 4);
		MAPA_GRUPOS_INVERSO.put("compras", 5);
	}

eu sei que ele pega a seção pela URL e encaminha para a url certa, acho que deveria funcionar assim, mas está rolando um comportamento estranho de os dados chegarem atrazados ou entao exemplo, na pagina inicial eu busca por festas, ele pega a url, captura esse "festas" e ai sabe pra onde encaminhar que seria "/festas/listagem.jsf" porem isso só acontece com uma das seções, para as outras simplesmente chega com o dado atrazado, no caso o dado da ultima página que é "/home/index.jsf" sendo que está exibindo a tela correta, somente na URL que deveria estar "/carnaval/listagem.jsf" fica mostrando "/home/index.jsf", muito estranho, por conta disso vários lugares no site estão com problemas e não consigo resolve-los, dependo muito da URL, mas os dados se chegarem atrazados não posso me utilizar deles, e agora?????

obrigado desde já a quem possa dar essa força.

1 Resposta

vanilton.coelho

alguem?

Criado 22 de agosto de 2008
Ultima resposta 22 de ago. de 2008
Respostas 1
Participantes 1