web-dev-qa-db-fra.com

Spring data rest - Existe-t-il un moyen de restreindre les opérations prises en charge?

Je souhaite exposer les données d'une base de données sous forme d'API Restful dans une application Spring (SpringBoot). Spring Data Rest semble être parfaitement adapté à cette activité.

Cette base de données est en lecture seule pour les besoins de mon application. La valeur par défaut fournit toutes les méthodes HTTP. Existe-t-il une configuration que je peux utiliser pour restreindre (en fait empêcher) que les autres méthodes soient exposées?

15
Manglu

Depuis les documents Spring sur Masquer les méthodes CRUD du référentiel :

16.2.3. Masquage des méthodes CRUD du référentiel

Si vous ne souhaitez pas exposer une méthode d'enregistrement ou de suppression sur votre CrudRepository, vous pouvez utiliser le paramètre @RestResource (exporté = faux) en remplaçant la méthode que vous souhaitez désactiver et en plaçant l'annotation sur la version remplacée. Par exemple, pour empêcher les utilisateurs HTTP d'invoquer les méthodes de suppression de CrudRepository, remplacez-les toutes et ajoutez l'annotation aux méthodes remplacées.

@RepositoryRestResource(path = "people", rel = "people")
interface PersonRepository extends CrudRepository<Person, Long> {

  @Override
  @RestResource(exported = false)
  void delete(Long id);

  @Override
  @RestResource(exported = false)
  void delete(Person entity);
}

Il est important de remplacer les deux méthodes de suppression car l'exportateur utilise actuellement un algorithme quelque peu naïf pour déterminer la méthode CRUD à utiliser dans l'intérêt de performances d'exécution plus rapides. Il n'est actuellement pas possible de désactiver la version de suppression qui prend un ID mais de laisser exportée la version qui prend une instance d'entité. Pour le moment, vous pouvez exporter les méthodes de suppression ou non. Si vous souhaitez les désactiver, alors gardez à l'esprit que vous devez annoter les deux versions avec exports = false.

26
Søren Kirkegård

Début 2018, il existe désormais la possibilité d'exposer uniquement les méthodes de référentiel explicitement déclarées pour l'exposition (DATAREST-1176)

Voir RepositoryRestConfiguration

A Exporter faux au niveau Type ne permet pas de remplacer l'export vrai au niveau Méthode ticket (DATAREST-1034) a été ouvert, mais fermé en tant que doublon de DATAREST-1176. Oliver Gierke a déclaré:

Je vais résoudre ce problème en fonction de la version de DATAREST-1176 pour l'instant, mais n'hésitez pas à rouvrir au cas où vous auriez besoin de quelque chose d'autre.

Ce ne sont pas des doublons exacts et les fonctionnalités décrites dans 1034 aurait été plus convivial, mais il y a maintenant au moins quelques options.

10
Snekse