2017-02-14 156 views
0

我正在使用Spring Boot spring-data-rest創建CrudRepository,並向用戶公開其餘端點。在CrudRepository中限制創建動作,只允許編輯動作

但我想阻止用戶創建新的記錄。 只允許用戶更新現有的記錄。

如何實現? CrudRepository沒有create方法,只是savedelete ...

+0

從您的評論下面看你沒有問你的實際問題。您是否可以更新您的問題以符合您的實際問題,並將解決方案作爲答案發布,以便可以幫助其他人解決類似問題? –

回答

0

CrudRepository提供CREATEEDIT採用相同的方法save。 但是spring-data-rest通過HTTP方法POST,PUT,PATCH公開了這兩個操作。

POST用於CREATE,因此我們可以通過彈簧安全限制這種方法:antMatchers(HttpMethod.POST, 「/ ...」)denyAll()

創建示例項目here

1

您可以添加攔截器:

public class SecurityInterceptor extends EmptyInterceptor { 

    @Override 
    public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) { 
     // insert logic here to check if it's an update 
     return super.onSave(entity, id, state, propertyNames, types); 

    } 

} 

添加攔截器與application.yaml:

jpa: 
    properties: 
     hibernate: 
     ejb: 
      interceptor: hello.SecurityInterceptor 
+1

我發現使用'antMatchers(HttpMethod.POST,「/ ...」).denyAll()'來限制HTTP POST的方法。但謝謝你的答案。 – Akivamu

相關問題