Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to prevent some HTTP methods from being exported from my MongoRepository?

I'm using spring-data-rest and I have a MongoRepository like this:

@RepositoryRestResource interface MyEntityRepository extends MongoRepository<MyEntity, String> { } 

I would like to allow the GET methods but disable PUT, POST, PATCH and DELETE (read only web service).

According to http://docs.spring.io/spring-data/rest/docs/2.2.2.RELEASE/reference/html/#repository-resources.collection-resource I should be able to do that like this:

@RepositoryRestResource interface MyEntityRepository extends MongoRepository<MyEntity, String> {      @Override     @RestResource(exported = false)     public MyEntity save(MyEntity s);      @Override     @RestResource(exported = false)     public void delete(String id);      @Override     @RestResource(exported = false)     public void delete(MyEntity t); } 

It doesn't seem to work as I can still do PUT, POST, PATCH and DELETE requests.

like image 675
avandecreme Avatar asked Mar 20 '15 15:03

avandecreme


2 Answers

Thanks to Oliver, here are the methods to override:

@RepositoryRestResource(collectionResourceRel = "people", path = "people") public interface PersonRepository extends MongoRepository<Person, String> {      // Prevents GET /people/:id     @Override     @RestResource(exported = false)     public Person findOne(String id);      // Prevents GET /people     @Override     @RestResource(exported = false)     public Page<Person> findAll(Pageable pageable);      // Prevents POST /people and PATCH /people/:id     @Override     @RestResource(exported = false)     public Person save(Person s);      // Prevents DELETE /people/:id     @Override     @RestResource(exported = false)     public void delete(Person t);  } 
like image 188
avandecreme Avatar answered Sep 28 '22 15:09

avandecreme


This is late reply, but if you need to prevent the global http method for a entity, try it.

@Configuration public class DataRestConfig implements RepositoryRestConfigurer {     @Override     public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {          config.getExposureConfiguration()                 .forDomainType(Person.class)                 .withItemExposure(((metdata, httpMethods) -> httpMethods.disable(HttpMethod.PUT, HttpMethod.POST, ... )))                 .withCollectionExposure((metdata, httpMethods) -> httpMethods.disable(HttpMethod.PUT, HttpMethod.POST, ...));     } } 
like image 37
윤현구 Avatar answered Sep 28 '22 16:09

윤현구