Olá,
estou desenvolvendo um sistema com EJB…
a parte de segurança eu qro deixar personalizada e usar um interceptor para verificar se o usuario estah logado…
acredito que seja possivel…
Seria basicamente assim:
@Stateful
@Remote(GerenciadorUsuario.class)
@RemoteBinding(jndiBinding = "academico/security/gerenciadorUsuario")
public class GerenciadorUsuarioBean implements GerenciadorUsuario {
@PersistenceContext
private EntityManager manager;
private Usuario usuarioLogado;
//Verifica se o usuário existe e seta o atributo usuarioLogado com o usuario retornado do Banco
@Override
public Usuario logar(Usuario usuario) throws UsuarioInvalidoException {
String sql = "select u from Usuario u where u.nomeUsuario = :nome and u.senha = :senha";
Query query = manager.createQuery(sql);
try {
usuarioLogado = (Usuario) query.setParameter("nome",
usuario.getNomeUsuario()).setParameter("senha",
usuario.getSenha()).getSingleResult();
} catch (Exception e) {
throw new UsuarioInvalidoException("Usuário inválido.", e);
}
usuarioLogado.getGrupo().getPermissoes();
usuarioLogado.getRestricoes();
usuarioLogado.getExcecoes();
return user;
}
//Retorna usuario logado
@Override
public Usuario getUsuarioLogado() {
return usuarioLogado;
}
Os demais EJBs vão ter q verificar se o usuario jah estah logado através de um Interceptor
public class AutenticaInterceptor {
@AroundInvoke
public Object autentica(InvocationContext icontext) throws Exception {
//verifica se usuario estah logado... se não estiver lança exceção
return icontext.proceed();
}
}
Minha duvida eh a seguinte:
como faço pra obter a referencia do EJB GerenciadorUsuarioBean que estah na sessão através do Interceptor AutenticaInterceptor e verificar se o atributo usuarioLogado é nulo?
Tentei injetar com o @EJB mas não deu certo… ele injeta uma nova instância do EJB GerenciadorUsuarioBean e o usuarioLogado é null
Bom… essa é a primeira ideia que tive… acredito que tenha melhores… se acharem ruim essa implementação agradeço se puderem me sugerir uma outra
desde jah obrigado