Comportamento estranho com JSF e Filtro

  1. Tenho na aplicação um filtro para efetivar o commit do hibernate.
  2. Quando a tela de login é chamada pela primeira vez, o filtro é acionado
    Quando eu solicito a página pela primeira vez (RESTAURAR VISÃO), ele passa pelo filtro normalmente. Os campos usuário e senha são preenchidos e submetidos para o servidor.
  3. O método do managed bean é acionado, e devido a senha estar errada, ele fica na mesma tela devolvendo o erro para o usuário. Nesse caso específico, como ele fica na mesma página o filtro não é acionado, algúem saberia me dizer o motivo?
    OBS: se o usuário acertar a senha, o usuário é enviado para a tela HOME da aplicação, e o filtro é chamado.
public class LoginBean {

	private String usuario;
	private transient String senha;

	public String efetuarLogin() {
		.....
		if (!senha.equals("guj")) {
                                                // não passa pelo filtro...
			return null;
		} else {
                                                // passa pelo filtro...
			return "home";
		}
	}
}

web.xml

 <filter>
  <filter-name>hibernateRequestFilter</filter-name>
  <filter-class>teste.HibernateRequestFilter</filter-class>
 </filter>


 <filter-mapping>
  <filter-name>hibernateRequestFilter</filter-name>
  <url-pattern>*.iface</url-pattern>
  <dispatcher>REQUEST</dispatcher>
  <dispatcher>FORWARD</dispatcher>
 </filter-mapping>

Filtro


.....
  public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    try {
    	chain.doFilter(req, resp);
    } catch (ServletException e) {
    	HibernateSessionProvider.abortTxContext();
    	log.warn("abortando transacao", e.getRootCause() == null ? e : e.getRootCause());
    	throw e;
    } catch (IOException e) {
    	HibernateSessionProvider.abortTxContext();
    	log.warn("abortando transacao", e);
    	throw e;
    } catch (RuntimeException e) {
    	HibernateSessionProvider.abortTxContext();
    	log.warn("abortando transacao", e);
    	throw e;
    } finally {
        log.info("[FILTER] - HibernateRequestFilter Finalizando Transação");
    	HibernateSessionProvider.closeTxContext();
    }

  }

Não entendi, alguém com mais experiência no assunto poderia me ajudar?

Agradeço antecipadamente…

Jukinha :?:

Cara, já executei um procedimento igual ao seu. Exatamente da mesma forma e funcionou, solução: Acende uma vela e reza!!! Tem certeza que o filtro não está sendo executado?

Cache no browser, proxy, etc…

Mesmo que exista erros de conversão em tua tela ou commands com immediate=true o filtro obrigatoriamente deveria ser executado!!!