JSF Passar dados do Usuário Logado para o Bean[RESOLVIDO]

Galera, me deem uma ajuda aqui!
Estou tentando passar o código da empresa do Usuário Logado para o meu Bean Cidade porém não estou conseguindo.

Estou utilizando o Bean Autenticação para recuperar as informações do usuário logado, mas de que forma eu consigo passar isso para o meu Bean na hora de salvar a Cidade?

Cidade.xhtml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
template="/templates/template.xhtml"
>


<ui:define name="conteudo">

	<h:form id="formListagem">
		<p:panel header="Cidades - Listagem">
			<p:dataTable id="tabela" emptyMessage="Nenhum registro encontrado."
				paginator="true" value="#{cidadeBean.cidades}" var="cidade" rows="5">
				<f:facet name="header">
					<p:commandButton value="Novo" actionListener="#{cidadeBean.novo}"
						oncomplete="PF('dialogo').show();"
						update=":mensagem :formCadastro:painel" >
						<f:actionListener type="org.omnifaces.eventlistener.ResetInputAjaxActionListener" />
						</p:commandButton>
				</f:facet>

				<p:column headerText="Nome" filterBy="#{cidade.nome}"
					sortBy="#{cidade.nome}">
					<h:outputText value="#{cidade.nome}" />
				</p:column>

				<p:column headerText="Estado" filterBy="#{cidade.estado.nome}"
					sortBy="#{cidade.estado.nome}">
					<h:outputText value="#{cidade.estado.nome}" />
					<h:outputText value=" - " />
					<h:outputText value="#{cidade.estado.sigla}" />
				</p:column>

				<p:column headerText="Opções">
					<p:commandButton icon="ui-icon-trash"
						actionListener="#{cidadeBean.excluir}"
						update=":mensagem :formListagem:tabela">
						<p:confirm header="Confirmação" message="Deseja excluir a cidade"
							icon="ui-icon-alert" />
						<f:attribute name="cidadeSelecionada" value="#{cidade}" />
						<f:actionListener type="org.omnifaces.eventlistener.ResetInputAjaxActionListener" />
					</p:commandButton>
					
					<p:commandButton icon="ui-icon-pencil"
						actionListener="#{cidadeBean.editar}"
						update=":mensagem :formCadastro:painel"
						oncomplete="PF('dialogo').show();">
						<f:attribute name="cidadeSelecionada" value="#{cidade}" />
						<f:actionListener type="org.omnifaces.eventlistener.ResetInputAjaxActionListener" />
					</p:commandButton>
				</p:column>
			</p:dataTable>
			
			<p:confirmDialog global="true">
				<p:commandButton value="Sim" type="button"
					styleClass="ui-confirmdialog-yes" icon="ui-icon-check" />
				<p:commandButton value="Não" type="button"
					styleClass="ui-confirmdialog-no" icon="ui-icon-close" />
			</p:confirmDialog>
		</p:panel>
	</h:form>

	<p:dialog header="Cidades - Cadastro" widgetVar="dialogo"
		draggable="false" resizable="false" global="true" closable="false">
		<h:form id="formCadastro">
			<h:panelGrid id="painel" columns="2">
				<p:outputLabel for="nome" value="Nome:" />
				<p:inputText id="nome" maxlength="50" size="30"
					value="#{cidadeBean.cidade.nome}" required="true"
					requiredMessage="O campo 'Nome' é obrigatório" />

				<p:outputLabel for="estado" value="Estado:" />
				<p:selectOneMenu id="estado" filter="true" value="#{cidadeBean.cidade.estado}"
					converter="omnifaces.SelectItemsConverter"
					required="true" requiredMessage="O campo 'Estado' é obrigatório">
					<f:selectItem noSelectionOption="true" itemLabel="Selecione um estado" />
					<f:selectItems value="#{cidadeBean.estados}" var="estado"
						itemValue="#{estado}" itemLabel="#{estado.nome} - #{estado.sigla}" />
				</p:selectOneMenu>
			</h:panelGrid>

			<h:panelGrid columns="2">
				<p:commandButton value="Salvar" actionListener="#{cidadeBean.salvar}"
					update=":mensagem :formCadastro:painel :formListagem:tabela"
					oncomplete="PF('dialogo').hide();" />
				<p:commandButton value="Fechar" oncomplete="PF('dialogo').hide();" />
			</h:panelGrid>
		</h:form>
	</p:dialog>
</ui:define>
</ui:composition>

cidadeBean

package br.com.riverp.Bean;
import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.omnifaces.util.Messages;

import br.com.riverp.dao.CidadeDAO;
import br.com.riverp.dao.EmpresaDAO;
import br.com.riverp.dao.EstadoDAO;
import br.com.riverp.dao.PessoaDAO;
import br.com.riverp.domain.Cidade;
import br.com.riverp.domain.Empresa;
import br.com.riverp.domain.Estado;
import br.com.riverp.domain.Pessoa;

@SuppressWarnings("serial")
@ManagedBean
@ViewScoped
public class CidadeBean implements Serializable {
	private Cidade cidade;
	private List<Cidade> cidades;
	private List<Estado> estados;
	private Empresa empresa;

	public Cidade getCidade() {
		return cidade;
	}

	public void setCidade(Cidade cidade) {
		this.cidade = cidade;
	}

	public List<Cidade> getCidades() {
		return cidades;
	}

	public void setCidades(List<Cidade> cidades) {
		this.cidades = cidades;
	}

	public List<Estado> getEstados() {
		return estados;
	}

	public void setEstados(List<Estado> estados) {
		this.estados = estados;
	}
	
	public Empresa getEmpresa() {
		return empresa;
	}
	
	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}
	
	@PostConstruct
	public void listar() {
		try {
			CidadeDAO cidadeDAO = new CidadeDAO();
			cidades = cidadeDAO.listar();
		} catch (RuntimeException erro) {
			Messages.addFlashGlobalError("Ocorreu um erro ao tentar listar as cidades");
			erro.printStackTrace();
		}
	}

	public void novo() {
		try {
			cidade = new Cidade();

			EstadoDAO estadoDAO = new EstadoDAO();
			estados = estadoDAO.listar("nome");
		} catch (RuntimeException erro) {
			Messages.addFlashGlobalError("Ocorreu um erro ao gerar uma nova cidade");
			erro.printStackTrace();
		}
	}
	
	public void salvar() {
		try {
			
			
			CidadeDAO cidadeDAO = new CidadeDAO();
			cidadeDAO.merge(cidade);

			cidade = new Cidade();

			EstadoDAO estadoDAO = new EstadoDAO();
			estados = estadoDAO.listar();

			cidades = cidadeDAO.listar();

			Messages.addGlobalInfo("Cidade salva com sucesso");
		} catch (RuntimeException erro) {
			Messages.addFlashGlobalError("Ocorreu um erro ao tentar salvar uma nova cidade");
			erro.printStackTrace();
		}
	}

	public void excluir(ActionEvent evento) {
		try {
			cidade = (Cidade) evento.getComponent().getAttributes().get("cidadeSelecionada");

			CidadeDAO cidadeDAO = new CidadeDAO();
			cidadeDAO.excluir(cidade);

			cidades = cidadeDAO.listar();

			Messages.addGlobalInfo("Cidade removida com sucesso");
		} catch (RuntimeException erro) {
			Messages.addFlashGlobalError("Ocorreu um erro ao tentar remover a cidade");
			erro.printStackTrace();
		}
	}
	
	public void editar(ActionEvent evento){
		try {
			cidade = (Cidade) evento.getComponent().getAttributes().get("cidadeSelecionada");

			EstadoDAO estadoDAO = new EstadoDAO();
			estados = estadoDAO.listar();
		} catch (RuntimeException erro) {
			Messages.addFlashGlobalError("Ocorreu um erro ao tentar selecionar uma cidade");
			erro.printStackTrace();
    		}	
    	}
    }

Preciso estanciar o codigo da empresa na entidade Cidade.

Você pode setar o objeto que quer num escopo de sessão através de:

FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("chave", "valor");

E pegar o valor assim:

FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("chave");

Amigo eu uso ele no bean de autenticação ou no XHTML da página de cidade?
e depois pra recuperar eu consigo fazer um cast e inseri-lo em uma entidade?

Na autenticação voce coloca no sessionMap e no bean de cidade voce o recupera.

Pode fazer o cast sim

Ta dando erro amigo. Olha só

AutenticaoBean

public void autenticar() {
	try {
		
		UsuarioDAO usuariodao = new UsuarioDAO();
		usuarioLogado = usuariodao.autenticar(usuario.getPessoa().getCpf(), usuario.getSenha());
		
		if(usuarioLogado == null) {
			Messages.addGlobalError("CPF ou Senha incorretos");
			return;
		}
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("chave", "#{autenticacaoBean.usuarioLogado.empresa.codigo}");
		Faces.redirect("./pages/principal.xhtml");
	}catch(IOException erro){
		erro.printStackTrace();
	}
	
}

CidadeBean

public void salvar() {
	try {
		empresa = (Empresa) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("chave");
		
		cidade.setEmpresa(empresa);
		CidadeDAO cidadeDAO = new CidadeDAO();
		cidadeDAO.merge(cidade);

		cidade = new Cidade();

		EstadoDAO estadoDAO = new EstadoDAO();
		estados = estadoDAO.listar();

		cidades = cidadeDAO.listar();

		Messages.addGlobalInfo("Cidade salva com sucesso");
	} catch (RuntimeException erro) {
		Messages.addFlashGlobalError("Ocorreu um erro ao tentar salvar uma nova cidade");
		erro.printStackTrace();
	}
}

Erro

java.lang.ClassCastException: java.lang.String cannot be cast to br.com.riverp.d
omain.Empresa
	at br.com.riverp.Bean.CidadeBean.salvar(CidadeBean.java:88)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:247)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267)
	at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpress
ionActionListener.java:149)
	at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
	at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:814)
	at javax.faces.component.UICommand.broadcast(UICommand.java:300)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhas
e.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:292)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:207)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:207)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:212)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:106)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase
.java:502)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141
)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogVa
lve.java:616)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:88)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Proce
ssor.java:1099)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(Abstrac
tProtocol.java:672)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.jav
a:1520)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:
1476)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.ja
va:61)
	at java.lang.Thread.run(Unknown Source)
mai 10, 2019 1:13:39 PM com.sun.faces.context.flash.ELFlash setCookie
ADVERTÊNCIA: JSF1095: The response was already committed by the time we tried to
 set the outgoing cookie for the flash.  Any values stored to the flash will not
 be available on the next request.
mai 10, 2019 1:14:31 PM org.apache.catalina.core.StandardContext reload
INFORMAÇÕES: Reloading Context with name [/Riverp] has started
mai 10, 2019 1:14:31 PM org.apache.catalina.session.StandardSession doWriteObjec
t

Bom… Você esta armazendo uma String, logo irá retornar uma String.

O Bean não entende EL

É só fazer como você sempre faz quando quer acessar um atributo

Ex:

...put("chave", pessoa.getNome());

Fiz como você disse, mas não retornando valor, ta salvando a cidade porém não ta pegando o dado e jogando no banco

É, de alguma forma isso não funciona, passei o fds todo atrás de respostas, exemplos e documentação mas nada que ajude.
A cidade é salva normalmente, mas a chave estrangeira não é preenchida, é como esse FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("chave", "valor"); não retornasse valor algum. Ou se está retornando não está sendo acessado pelo outro MB. Enfim, vou procurar outra solução porque essa para mim não funcionou. Obrigado pela atenção!

Você esta com o código que eu sugeri ainda ou já apagou?
Se tiver, posta ai para eu ver como você fez, pois antes você estava passando uma EL no bean e lá EL não funciona

autenticaçãoBean

@ManagedBean
@SessionScoped
public class AutenticacaoBean {
	private Usuario usuario;
	private Usuario usuarioLogado; 
	
	public Usuario getUsuarioLogado() {
		return usuarioLogado;
	}
	
	public void setUsuarioLogado(Usuario usuarioLogado) {
		this.usuarioLogado = usuarioLogado;
	}
	
	public Usuario getUsuario() {
		return usuario;
	}
	
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	
	@PostConstruct
	public void inciar() {
		usuario = new Usuario();
		usuario.setPessoa(new Pessoa());
		
	}
	
	public void autenticar() {
		try {
			
			UsuarioDAO usuariodao = new UsuarioDAO();
			usuarioLogado = usuariodao.autenticar(usuario.getPessoa().getCpf(), usuario.getSenha());
			
			if(usuarioLogado == null) {
				Messages.addGlobalError("CPF ou Senha incorretos");
				return;
			}
			
			FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("chave", usuario.getEmpresa());
			Faces.redirect("./pages/principal.xhtml");
		}catch(IOException erro){
			erro.printStackTrace();
		}
		
	}
	
	public boolean temPermissoes(List<String>permissoes) {
		
		for(String permissao : permissoes) {
			if(usuarioLogado.getTipo() == permissao.charAt(0)) {
				
				return true;
			}
		}
		return false; 
	}
}

cidadeBean (método Salvar)

public void salvar() {
	empresa = (Empresa) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("chave");
	
	try {
		cidade.setEmpresa(empresa);
		CidadeDAO cidadeDAO = new CidadeDAO();
		cidadeDAO.merge(cidade);

		cidade = new Cidade();

		EstadoDAO estadoDAO = new EstadoDAO();
		estados = estadoDAO.listar();

		cidades = cidadeDAO.listar();

		Messages.addGlobalInfo("Cidade salva com sucesso");
	} catch (RuntimeException erro) {
		Messages.addFlashGlobalError("Ocorreu um erro ao tentar salvar uma nova cidade");
		erro.printStackTrace();
	}
}

Já printou no console ou debugou pra ver se não esta vindo mesmo?

De qualquer forma, tem outras soluções:
1- Injetar o seu AutenticacaoBean no seu cidadeBean através de @ManagedProperty ou @Named(Caso esteja usando CDI)

2- Passar o objeto do AutenticacaoBean como parametro do método no actionListener

actionListener="#{cidadeBean.salvar(autenticacaoBean.empresa)}"

3- Colocar o objeto na request

<p:commandButton ...>
    <f:param name="empresa" value="#{autenticacaoBean.empresa}" />
</p:commandButton>


Empresa empresa = (Empresa) FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("empresa");

4- Setar diretamente no atributo do seu bean

<p:commandButton ...>
    <f:setPropertyActionListener target="#{cidadeBean.empresa}" value="#{autenticacaoBean.empresa}" />
</p:commandButton>

Amigo, esse deu certo perfeitamente, valeeeeu!