alexfe
Janeiro 30, 2013, 2:33am
#1
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.
alexfe
Fevereiro 1, 2013, 2:04am
#3
Solução de “contorno” entendem neh
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