[Resolvido]Adicionar Usuário na Auditoria com Hibernate

Pessoal eu estou desenvolvendo a auditoria de registro com o Hibernate Envers mas eu não consigo de forma nenhuma pegar o usuário que está logado.

Segue o listener.

[code]public class CustomListener implements RevisionListener {

@Override
public void newRevision(Object revisionEntity) {
	try {
		InformacaoRevisao informacaoRevisao = (InformacaoRevisao) revisionEntity;
		informacaoRevisao.setUserName("AQUI VAI O USUARIO");
	} catch (Exception e) {
		throw new RuntimeException(e.getMessage());
	}
}

}

[/code]

Se eu escrever o UserName estatico para teste funciona perfeitamente mas eu não consigo pegar o usuário logado.
Alguém já passou por isso ?
Já tentei o acesso ao request mas sem sucesso.

Alguém ?

Solução de “contorno” entendem neh :slight_smile:
Filter OpenSessionInView

public class ConexaoFilter implements Filter {

	private static final long serialVersionUID = 1L;
	private SessionFactory sf;

	public ConexaoFilter() {
	}

	public void init(FilterConfig config) throws ServletException {
		sf = HibernateUtil.getSessionFactory();
	}

	public void destroy() {
	}

	public void doFilter(ServletRequest servletRequest,
			ServletResponse servletResponse, FilterChain chain)
			throws IOException, ServletException {
		try {
			
			estabelecerThreadUserLogado(servletRequest);
			
			sf.getCurrentSession().beginTransaction();
			chain.doFilter(servletRequest, servletResponse);
			sf.getCurrentSession().getTransaction().commit();
			sf.getCurrentSession().close();

		} catch (Exception e) {

			if (sf.getCurrentSession().getTransaction().isActive()) {
				sf.getCurrentSession().getTransaction().rollback();
			}
			if (sf.getCurrentSession().isOpen()) {
				sf.getCurrentSession().close();
			}
		} finally {
			if (sf.getCurrentSession().isOpen()) {
				sf.getCurrentSession().close();
			}
		}

	}

	private void estabelecerThreadUserLogado(ServletRequest servletRequest) {
		try {
			String codUser = null;
			codUser = obterIdUserLogado(servletRequest, codUser);
			if (codUser != null && !codUser.trim().isEmpty()) {
				Long cod = Long.parseLong(codUser);
				UtilFramework.getThreadLocal().set(cod);
			} else {
				UtilFramework.getThreadLocal().set(0L);
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private String obterIdUserLogado(ServletRequest servletRequest,
			String codUser) {
		
		Map<String, String[]> map = servletRequest.getParameterMap();
		Set<String> set = map.keySet();
		
		for (String string : set) {
			if (string.contains("userLogado")) {
				codUser = servletRequest.getParameter(string);
				break;
			}
		}
		return codUser;
	}
}

Revision Listener Hibernate Envers

public class CustomListener extends AbstractProcessLogger implements
		RevisionListener {

	@Override
	public void newRevision(Object revisionEntity) {
		try {
			InformacaoRevisao informacaoRevisao = (InformacaoRevisao) revisionEntity;
			Long codUser = UtilFramework.getThreadLocal().get();
			if(codUser != null && codUser != 0L){
				Usuario user = new Usuario();
				user.setId(codUser);
				informacaoRevisao.setUsuario(user);
			}
		} catch (Exception e) {
			throw new RuntimeException(e.getMessage());
		}
	}

}

Funciona perfitamente mesmo com varios usuários realizando operações na base :slight_smile: