Hibernate Events + WidFly + CDI + JSF 2.2

Olá senhores, estou precisando um de pequeno suporte quando ao uso do framework Hibernate, pois estou tentando implementar na minha empresa um sistema, e nele devo ter o controle de todas as alterações realizadas pelo usuário.
Para criação desse sistema estou utilizando as seguintes linguagens e ferramentas: Eclipse, JSF 2.2, CDI, Hibernate Events, Postgresql, Jboss WidFly10.
Pois bem foram criadas as seguintes tabelas;

Classe usuario

@Audited
@Entity
@Table(name = “usuario”, schema = “public”)
@SequenceGenerator(name = “usuarioSequenceGen”, sequenceName = “usuario_idusuario_seq”, allocationSize = 1, initialValue = 1)
public class Usuario implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "usuarioSequenceGen")
@Column(name = "idUsu", nullable = false, unique = true)
private Integer idUsu;

//@NaturalId
@Column(name = "apelidoUsu", nullable = false, unique = true, length = 15)
private String apelidoUsu;

@Column(name = "senhaUsu", length = 255)
private String senhaUsu;

Classe de Auditoria
package entity;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.ForeignKey;
import org.hibernate.envers.Audited;
import org.hibernate.envers.DefaultRevisionEntity;
import org.hibernate.envers.RelationTargetAuditMode;
import org.hibernate.envers.RevisionEntity;

import listener.CustomListener;

@SuppressWarnings(“deprecation”)
@Entity
@Table(name = “revinfo”)
@RevisionEntity(CustomListener.class)
public class InformacaoRevisao extends DefaultRevisionEntity implements Serializable {

private static final long serialVersionUID = 1L;

@Column
private String nomeUsuario;

@Temporal(TemporalType.DATE)
@Column(name = "data_auditoria")
private Date data_auditoria;

@Temporal(TemporalType.TIME)
@Column(name = "hora_auditoria")
private Date hora_auditoria;

Uma classe de Login

@Named
@SessionScoped
public class AutenticadorUsuario implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = 1L;

private Usuario usuarioLogado;

@Inject
private IUsuario usuarioDao;

// True se usuário está logado e false caso contrário
private boolean loggedIn;

private String senha;

private String apelido;

private Integer idUsu;

@PostConstruct
public void init() {
	this.usuarioLogado = new Usuario();
	this.senha = null;
	this.apelido = null;
}

// DigestUtils.md5Hex(
public String loginUsuario() {
	FacesContext context = FacesContext.getCurrentInstance();
	try {
		usuarioLogado = usuarioDao.loginUsuario(usuarioLogado.getApelidoUsu(),
				DigestUtils.md5Hex(usuarioLogado.getSenhaUsu()));
		if (usuarioLogado == null) {
			usuarioLogado = new Usuario();

			FacesContext.getCurrentInstance().addMessage(null,
					new FacesMessage(FacesMessage.SEVERITY_ERROR, "Usuário não encontrado!", "Erro no Login!"));
			context.getExternalContext().getFlash().setKeepMessages(true);
			return null;
		} else if (usuarioLogado.getStatusUsu() == "INATIVO") {
			FacesContext.getCurrentInstance().addMessage(null,
					new FacesMessage(FacesMessage.SEVERITY_WARN, "Usuário Bloqueado", "Erro no Login!"));
			context.getExternalContext().getFlash().setKeepMessages(true);
			return null;
		} else {
			System.out.println("RETORNO ESSE USUARIO" + usuarioLogado.getApelidoUsu());
			loggedIn = true;
			return "/admin/template/LayoutPadrao.jsf?faces-redirect=true";
		}
	} catch (

	Exception e) {
		FacesContext.getCurrentInstance().addMessage(null,
				new FacesMessage(FacesMessage.SEVERITY_ERROR, "Usuário não encontrado!", "Erro no Login!"));
		context.getExternalContext().getFlash().setKeepMessages(true);
		return "/security/login.jsf?faces-redirect=true";
	}
}

Uma classe SessionBean para pegar o usuario logado

@Named
@SessionScoped
public class SessionBean implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = 1L;

@Inject
@ManagedProperty(value = "#{autenticadorUsuario}")
private AutenticadorUsuario autenticadorUsuario;

public String apelido() {
	System.out.println("LOGADO " + autenticadorUsuario.getUsuarioLogado().getApelidoUsu());
	return autenticadorUsuario.getUsuarioLogado().getApelidoUsu();

}

E por ultimo a classe CustomListener

public class CustomListener implements RevisionListener {

private SessionBean bean;

@Override
public void newRevision(Object revisionEntity) {
	InformacaoRevisao revEntity = (InformacaoRevisao) revisionEntity;
	System.out.println("LOGADO " + bean.apelido());
	revEntity.setNomeUsuario(bean.apelido());
	revEntity.setData_auditoria(new Date(System.currentTimeMillis()));
	revEntity.setHora_auditoria(new Time(System.currentTimeMillis()));
}

public SessionBean getBean() {
	return bean;
}

public void setBean(SessionBean bean) {
	this.bean = bean;
}

O problema é setar o usuário logado na classe CustomListener , pois não estou conseguindo atualmente.

O problema é pegar o usuario da sessão?
Eu faço assim:

FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("chave", "valor");//Coloca na sessão FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("chave");//Pega da sessão FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("chave");//Remove da sessão

Mike, infelizmente não consegui resolver com sua orientação.