Quantcast
Channel: Programação - GUJ
Viewing all articles
Browse latest Browse all 33093

Spring não reconhece EJB Stateless para injeção de dependência

$
0
0

@raphaeloneves escreveu:

Saudações, meu caros.

Estou implementando uma solução de autenticação e autorização baseada no Spring Security num projeto feito com JEE.
Meu problema é o seguinte: Na classe AppUserDetailsService tenho uma injeção de dependência do meu repository, que é um EJB Stateless, porém, o spring não consegue fazer essa injeção e lança um NPE.

Classe AppUserDetailsService que é um bean do Spring

 @Service
public class AppUserDetailsService implements UserDetailsService {

    @Inject
    Usuarios usuarios;

    @Override
    public UserDetails loadUserByUsername(String nome) throws UsernameNotFoundException {
        Usuario usuario = usuarios.findByUsername(nome);
        UsuarioSistema user = null;
        if (usuario != null) {
            user = new UsuarioSistema(usuario, getGrupos(usuario));
        }
        return user;
    }

    private Collection<? extends GrantedAuthority> getGrupos(Usuario usuario) {
        List<SimpleGrantedAuthority> authorities = new ArrayList<>();

        for (Grupo grupo : usuario.getGrupos()) {
            authorities.add(new SimpleGrantedAuthority(grupo.getNome().toUpperCase()));
        }

        return authorities;
    }

}

Meu EJB Stateless que representa meu Repositório de usuários

@Stateless
public class Usuarios{

    @PersistenceContext
    private EntityManager manager;

    private Usuarios usuarios;

    @Override
    public Usuario findByUsername(String username) {
        return manager.createQuery("from Usuario where nome = :nome", Usuario.class)
                .setParameter("nome", username).getSingleResult();
    }

}

A NPE é lançada na injeção do EJB dentro do Bean Spring.

Também tentei a abordagem de criar uma interface Usuarios e criar sua devida implementação como EJB. Feito isso, registrei o EJB criado por meio do JNDI no applicationContext do Spring, ficando da seguinte forma:

Bean Spring

@Service
public class AppUserDetailsService implements UserDetailsService {

    @Autowired
    Usuarios usuarios;
........
}

applicationContext.xml

<jee:local-slsb jndi-name="java:global/projeto-base/UsuariosImpl!br.com.raphaelneves.dao.Usuarios"
                    id="usuarios" business-interface="br.com.raphaelneves.dao.Usuarios" />

    <beans:bean id="usuariosImpl" class="br.com.raphaelneves.dao.UsuariosImpl">
        <beans:property name="usuarios" ref="usuarios" />
    </beans:bean>

Alguém poderia dar uma luz de como fazer o Spring reconhecer e injetar o EJB Stateless na implementação da UserDetailsService? :frowning:

Mensagens: 1

Participantes: 1

Ler tópico completo


Viewing all articles
Browse latest Browse all 33093


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>