Bom dia.
Não sei se estou no lugar certo, mas vamos lá.
Comecei a estudar hibernate + segurança com jaas, e até estão rodando 100% nos testes.
Tenho os usuarios cadastrados de teste, e conseguem se logar certinho no sistema.
Não tenho nenhum mapeamento, classe para o usuario, pois o jaas já faz toda a parte do login.
porém a minha duvida é a seguinte, como farei para separar os dados de clientes por empresa.
Tenho uma tabela de clientes com os seguintes campos:
idempresa / nome
1 / alberto
1 / maria
2 / pedro
e a tabela de usuarios com os seguintes campos:
idempresa / nome / senha
1 / joao / 123
2 / tiago / 123
como faço para quando o joao se logar só aparecer os clientes alberto e maria
e qndo o tiago se logar aparecer o cliente pedro
Utilizo banco de dados Postgres e JSF.
Se alguem puder me dar uma luz agradeço.
Mas isso não tem nada a ver com autenticação. Você vai ter que criar filtros para buscar os clientes por determinado usuário. Na autenticação você so ira precisar da tabela usuario.
Certo… isso eu sei.
Mas como eu pego o idempresa do usuario quando ele se conectar?
como eu pego o idempresa=1 quando o usuario joao se logar no sistema.
Eu preciso pegar o idempresa pra mim fazer o filtro na lista de clientes.
select * from clientes
where idempresa=1
mesmo assim obrigado pela rapida resposta.
Vc esta trabalho com hibernate certo ?
Vc tem que buscar no banco depois que o usuário logar o objeto usuario passando, por exemplo, o login dele como parametro para o DAO (ou oq vc esteja usando para acessar a base de dados) .
beleza, já me deu um ponto inicial por onde começar.
Eu pensei que poderia pegar o idempresa direto ao se logar com o jaas, sem o uso de mais nada.
Muito obrigado.
Eu mostrei um modo de se fazer isso com filter nesse post: Validação de Login de Usuário com JSF e JAAS.
Qualquer outra dúvida, post aí. [=
jakefrog…
dei uma olhada em seu blog, muito bom por sinal.
e obrigado pela resposta também.
Essa é minha classe pessoaBean
[code]package negocio;
import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import dominio.Pessoa;
import util.EntityManagerUtil;
@ManagedBean(name=“pBean”)
@ViewScoped
public class pessoaBean implements Serializable{
private static final long serialVersionUID = 5173312796946661545L;
private EntityManager entityManager;
private Pessoa pessoa = new Pessoa();
private Long id;
private List<Pessoa> list = null;
public String persist() {
try {
EntityTransaction transacao = getEntityManager().getTransaction();
transacao.begin();
getEntityManager().persist(pessoa);
transacao.commit();
newInstance();
list = null;
return "sucesso";
} catch (Exception e) {
e.printStackTrace();
return "falhou";
}
}
public String update() {
try {
EntityTransaction transacao = getEntityManager().getTransaction();
transacao.begin();
getEntityManager().merge(pessoa);
transacao.commit();
newInstance();
return "sucesso";
} catch (Exception e) {
e.printStackTrace();
return "falhou";
}
}
public String remove() {
try {
EntityTransaction transacao = getEntityManager().getTransaction();
transacao.begin();
getEntityManager().remove(pessoa);
transacao.commit();
newInstance();
list = null;
return "sucesso";
} catch (Exception e) {
e.printStackTrace();
return "falhou";
}
}
@SuppressWarnings("unchecked")
public List<Pessoa> getList() {
if (list == null) {
list = getEntityManager().createQuery("FROM Pessoa").getResultList();
}
return list;
}
public EntityManager getEntityManager() {
if (entityManager == null) {
entityManager = EntityManagerUtil.getInstance().createEntityManager();
}
return entityManager;
}
public void setPessoa(Pessoa pessoa) {
this.pessoa = pessoa;
}
public Pessoa getPessoa() {
return pessoa;
}
public void setId(Long id) {
this.id = id;
if (id != null) {
pessoa = getEntityManager().find(Pessoa.class, id);
}
}
public Long getId() {
return id;
}
public void newInstance() {
pessoa = new Pessoa();
}
}[/code]
E essa é minha classe EntityManagerUtil.
[code]package util;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class EntityManagerUtil {
private static final EntityManagerUtil instance = new EntityManagerUtil();
private static final EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("crud");
private EntityManagerUtil() {
}
public static EntityManagerUtil getInstance() {
return instance;
}
public EntityManagerFactory getEntityManagerFactory() {
return entityManagerFactory;
}
public EntityManager createEntityManager() {
return entityManagerFactory.createEntityManager();
}
}
[/code]
Devo criar uma nova classe para saber o IDEmpresa do usuário ao se logar?
Ou posso usar nessas mesmo.
Quero só saber por questões de estudos, pra realizar uns testes aqui.
Pegar o IDEmpresa, o nome do cliente e apresentar na aplicação e tudo mais.
Agradeço e fico no aguardo e possíveis dicas.
Por mim você pode. Se viu que no post lá eu usei um filter?
Basta vc utilizar um filter tb colocar o usuário na sessão e pronto.
Consegui jakefrog.
Acho que fiz uma coisa de amador profissional…
da uma olhada como ficou o código.
adicionei o seguinte código no meu pessoaBean.
private ExternalContext usuarioDaSessao() {
FacesContext c = FacesContext.getCurrentInstance();
ExternalContext user = c.getExternalContext();
return user;
}
public void pegaIDEmpresa() {
String login = usuarioDaSessao().getUserPrincipal().getName(); //aqui pega o usuario da sessão.. o login.
codempresa = (Integer) getEntityManager().createQuery("select idempresa FROM Usuario where nome_usuario='"+login+"'").getSingleResult(); // aqui faz um select na tabela de usuarios para pegar o código da empresa
}
e no list ficou assim:
public List<Pessoa> getList() {
if (list == null) {
pegaIDEmpresa();
list = getEntityManager().createQuery("FROM Pessoa where idempresa="+codempresa).getResultList(); //aqui fiz um select com um where IDEMPRESA na tabela de clientes para listar somente os clientes pertencentes aquela empresa
}
return list;
}
funcionou, da maneira que eu queria.
mas sabes me informar se fiz um negócio meio feio?
se tem como melhorar isso?
agradeço.
Já que é para dar pitaco no código alheio… vamos lá:
nome método pegaIDEmpresa:
- Troca o nome para getIdEmpresa. Se acostume autilizar get/set no nome dos seus métodos pois tem muito framework que exige esse padrão.
- coloca um if (codempresa == null) aí faz a pergunta. Pq se não, toda hora que chamarem o método ele irá realizar a mesma consulta.
- ExternalContent não é o seu usuário da sessão não. E no seu código vc ta chamando de user… =P
- Estuda depois sobre padrão MVC. Vc separa melhor seus códigos em pacotes diferentes, com isso seu programa fica profissa.
Mas mano, é coisa que eu penso pode vir outra pessoa e discordar de tudo q eu falei e te dar opiniões melhores que as que eu te dei.
Qualquer coisa, tamo ae! [=
Muito obrigado pelas dicas.
já está rodando como eu queria.
Um abraço.
Feliz natal e ano novo. 