Pessoal, estou com um problema no envers, para criar um campo na tabela Revisions…
Estou usando o Envers do Hibernate, está funcionando, salvando nas tabelas *AUD.
Porem preciso customizar o RevisionListener, para salvar o nome do usuario que fez a alteração.
Para isso criei uma classe e implementei a RevisionListener.
E sobrescrevi o método newRevision.
Até ai tudo bem.
O problema é que neste ponto, eu não tenho o nome do usuario para setar.
O nome esta na sessão, porem neste ponto não tenho acesso a ela.
Estou usando struts 1 e spring (não estou usando spring security)
@Override
public void newRevision(Object arg0) {
RevisionVO rev = (RevisionVO) arg0;
rev.setUsername("Teste"); //Nesse ponto não consigo pegar o nome, pois ele está na sessão. Existe outra forma?
}
Resolvido, assim é possivel pagar qq obj da sessão.
public class RevisionListener implements org.hibernate.envers.RevisionListener {
@Override
public void newRevision(Object arg0) {
UserInformation userInformation = (UserInformation) getSession().getAttribute("userInformation");
RevisionVO rev = (RevisionVO) arg0;
rev.setUsername(userInformation.getUserLogin());
System.out.println("Dentro do Listener");
}
private HttpServletRequest getRequest() {
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
return requestAttributes.getRequest();
}
private HttpSession getSession() {
return getRequest().getSession();
}
}
No web.xml tem q ter a configuração:
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
Se não colocar a configuração no xml, ele não acha a classe: RequestContextHolder