Onde fechar a session hibernate + JSF

Boa tarde me deparei com o seguinte erro hj:

org.hibernate.LazyInitializationException: could not initialize proxy - no Session

pesquisando na Web vi que o erro está acontecento pq tenho um ManyToOne

@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "id_grupo") private Grupo grupo; e quando tento recuperar os dados a session esta fechada, removi o session.close e o erro parou, mas agora surgiu a duvida onde eu posso fechar a session?

estava fazendo assim:

@ManagedBean
@ViewScoped
public class SubGrupoListaBean implements Serializable {

    @PostConstruct
    public void initIt() {
        dao.getGenericDao().conect(); //abre a session
    }

    @PreDestroy
    public void cleanUp() {
        dao.getGenericDao().disconect(); //Fecha a session, se eu comentar essa linha não da mais erro porém a session fica aberta.
    }
Alguns códigos foram suprimidos.

Dê uma lida nisso aqui: Quatro soluções para LazyInitializationException

Obrigado Rodrigo.

Alguém mais teria outra ideia?

Já tentou implementar alguma das 4 soluções acima? Como foi?

boa tarde.

Tentei usar o filter ficou assim:
web.xml

 <filter>
        <filter-name>HibernateSessionFilter</filter-name> 
        <filter-class>br.bd.HibernateSessionFilter</filter-class> 
    </filter>  
    <filter-mapping>
        <filter-name>HibernateSessionFilter</filter-name> 
      <url-pattern>/faces/*</url-pattern>
    </filter-mapping>

o Filtro

package br.bd;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class HibernateSessionFilter implements Filter {
        @Override
	public void doFilter(ServletRequest req, ServletResponse res, FilterChain fc) throws IOException, ServletException {
		HibernateUtil.openSession();
		try {
			HibernateUtil.currentSession().beginTransaction();
			fc.doFilter(req, res);
			HibernateUtil.currentSession().getTransaction().commit();
		} catch (Exception e) {
			HibernateUtil.currentSession().getTransaction().rollback();
			throw new ServletException(e);
		} finally {
			HibernateUtil.closeCurrentSession();
		}
	}
	
        @Override
	public void init(FilterConfig c) {	
	}

        @Override
	public void destroy() {	
	}
}

está dando o seguinte erro:

Alguem pode me dar uma força?