[RESOLVIDO] CDI + Hibernate Envers ERRO ao injetar ManagedBean

2 respostas
R

Fala galera! Estou com um problema no Hibernate Envers (auditoria). Tenho uma tabela do banco que armazena todos as alterações nas tabelas auditadas pelo Hibernate. Esta tabela está mapeada pela classe AuditoriaRevisao. Pois é, toda alteração no banco é feito um insert nesta tabela com o usuário logado na aplicação. Estou utilizando CDI e na classe AuditoriaListener, que armazena o usuário logado, não consigo injetar o usuário logado na aplicação. Segue classes:

Classe AuditoriaRevisao

@Entity
@Table(name="auditoriaRevisao")
@RevisionEntity(AuditoriaListener.class)
public class AuditoriaRevisao implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = IDENTITY)
	@RevisionNumber
	private int idRevisao;

	@RevisionTimestamp
	@Temporal(TemporalType.TIMESTAMP)
	private Date dataRevisao;

	private String login;

	// getters e setters

}

Classe AuditoriaListener

@Named
public class AuditoriaListener implements RevisionListener, Serializable {

	private static final long serialVersionUID = 1L;
	
	@Inject
	private UsuarioLogadoBean usuarioLogadoBean;
	
	@Override
	public void newRevision(Object object) {
		//Usuario usuario = usuarioLogadoBean.getUsuario();

		AuditoriaRevisao auditoriaRevisao = (AuditoriaRevisao) object;
		auditoriaRevisao.setLogin("teste");
	}

}

Classe UsuarioLogadoBean

@Named
@SessionScoped
public class UsuarioLogadoBean implements Serializable {

	private static final long serialVersionUID = 1L;

	@Inject
	private HttpSession session;
	private Usuario usuario;

	public void logar(Usuario usuario) {
		this.usuario = usuario;
	}

	public void deslogar() {
		this.usuario = null;
	}

	public boolean isLogado() {
		return usuario != null;
	}
	
	public void logoff() {
		session.invalidate();
	}
	
	public Usuario getUsuario() {
		return usuario;
	}

}

Como puderam verificar, até botei a anotação @Named na classe AuditoriaListener com a intensão de injetar o UsuarioLogadoBean, mas não obtive sucesso.

Alguém pode me ajudar?

2 Respostas

R

Fala galera! Demorou mas saiu. Eu resolvi este problema quando implementei minha camada de segurança com Shiro. Apos fazer todas as configurações do Shiro e ajustar o Hibernate Envers, adicionei o descrito abaixo para armazenar o usuário logado na aplicação nas tabelas de auditoria.

public class AuditoriaListener implements RevisionListener, Serializable {

	private static final long serialVersionUID = 1L;
	
	@Override
	public void newRevision(Object object) {
		Subject currentUser = SecurityUtils.getSubject();
		AuditoriaRevisao auditoriaRevisao = (AuditoriaRevisao) object;
		auditoriaRevisao.setLogin(currentUser.getPrincipal().toString());
	}

}

Espero ter ajudado

G

Galera fiz um post maneiro sobre Hibernate Envers, lá eu ensino como customizar a auditoria de ações do hibernate e como consumir os dados gerados nessas tabelas de auditoria do envers por meio de codigo java… ficou bem fácil de entender, bem bacana e tira essa dúvida sua amigo… qualquer dúvidas, estou a disposição!!

Criado 3 de agosto de 2015
Ultima resposta 29 de out. de 2015
Respostas 2
Participantes 2