2017-07-05 1 views
2

J'utilise spring-data-rest et j'expose des points de terminaison pour CRUD-ing mes entités via des dépôts.
Une des entités doit pouvoir être mise à jour avec les méthodes PATCH/PUT, mais il ne devrait pas être possible de créer une nouvelle instance avec la méthode POST.Exporter PATCH/PUT mais pas POST dans @RepositoryRestResource

Il semble que les deux actions passent par la méthode save il ne semble pas possible d'exporter seulement quelques-unes des demandes:

@RestResource(exported = ?) 
@Override 
<S extends User> S save(S s); 

Quelle est la meilleure façon d'y parvenir? Doit-on remplacer la méthode save? Écrire personnalisé Validator?

Répondre

2

Vous pouvez utiliser

Les deux premiers devraient écouter BeforeCreateEvent.

+0

L'utilisation de l'une ou l'autre de ces solutions entraînera le retour de la requête OPTIONS "Autoriser: POST, ..." dans les en-têtes, ce qui est faux? – Piotr

+0

Je le pense. J'ai ajouté une troisième option, où vous pouvez également manipuler OPTIONS-Mapping. – benkuly

+0

Merci. La troisième option a fonctionné pour moi. – Piotr

0

Une solution est d'étendre WebSecurityConfigurerAdapter (disponible en spring-security-config) pour refuser l'accès pour les requêtes POST à ​​l'URL cible:

@Configuration 
@EnableWebSecurity 
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.authorizeRequests() 
       .antMatchers(HttpMethod.POST, "/path_to_target_url").denyAll(); 
    } 

} 

Toute tentative de POST à ​​l'URL cible échouera avec une erreur 401 Unauthorized.