sql >> Base de Datos >  >> NoSQL >> MongoDB

Autenticación con Spring Security + Spring data + MongoDB

Capa de servicio

Tienes que crear un service separado implementando org.springframework.security.core.userdetails.UserDetailsService e inyectarlo dentro del AuthenticationManagerBuilder .

@Component
public class SecUserDetailsService implements UserDetailsService{

    @Autowired
    private UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        /*Here add user data layer fetching from the MongoDB.
          I have used userRepository*/
        User user = userRepository.findByUsername(username);
        if(user == null){
            throw new UsernameNotFoundException(username);
        }else{
            UserDetails details = new SecUserDetails(user);
            return details;
        }
    }
}

Modelo

UserDetails También debe implementarse. Este es el POJO que mantendrá los detalles autenticados del usuario por Spring. Puede incluir su objeto de datos de Entidad envuelto dentro de él, como lo he hecho yo.

public class SecUserDetails implements UserDetails {

    private User user;

    public SecUserDetails(User user) {
        this.user = user;
    }
    ......
    ......
    ......
}

Configuración de seguridad

Autoconecta el servicio que creamos antes y configúralo dentro del AuthenticationManagerBuilder

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    SecUserDetailsService userDetailsService ;

    @Autowired
    public void configAuthBuilder(AuthenticationManagerBuilder builder) throws Exception {
        builder.userDetailsService(userDetailsService); 
    }
}