@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?
Mensagens: 1
Participantes: 1