我正在使用Spring Boot spring-data-rest創建CrudRepository,並向用戶公開其餘端點。在CrudRepository中限制創建動作,只允許編輯動作
但我想阻止用戶創建新的記錄。 只允許用戶更新現有的記錄。
如何實現? CrudRepository沒有create
方法,只是save
delete
...
我正在使用Spring Boot spring-data-rest創建CrudRepository,並向用戶公開其餘端點。在CrudRepository中限制創建動作,只允許編輯動作
但我想阻止用戶創建新的記錄。 只允許用戶更新現有的記錄。
如何實現? CrudRepository沒有create
方法,只是save
delete
...
CrudRepository提供CREATE
和EDIT
採用相同的方法save
。 但是spring-data-rest通過HTTP方法POST,PUT,PATCH公開了這兩個操作。
POST用於CREATE
,因此我們可以通過彈簧安全限制這種方法:antMatchers(HttpMethod.POST, 「/ ...」)denyAll()
創建示例項目here。
您可以添加攔截器:
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
我發現使用'antMatchers(HttpMethod.POST,「/ ...」).denyAll()'來限制HTTP POST的方法。但謝謝你的答案。 – Akivamu
從您的評論下面看你沒有問你的實際問題。您是否可以更新您的問題以符合您的實際問題,並將解決方案作爲答案發布,以便可以幫助其他人解決類似問題? –