- Tenho na aplicação um filtro para efetivar o commit do hibernate.
- 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. - 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 :?: