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? 