我使用Spring Boot spring-data-rest创建CrudRepository,并向用户公开其他端点。
但我想阻止用户创建新记录。 只允许用户更新现有记录。
如何实现? CrudRepository没有create
方法,只有save
delete
......
答案 0 :(得分: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 :(得分:0)
CrudRepository在同一方法CREATE
中提供EDIT
和save
。
但是spring-data-rest通过HTTP方法POST,PUT,PATCH来公开这两个操作。
POST用于CREATE
,因此我们可以通过spring-security限制此方法:antMatchers(HttpMethod.POST,“/ ...”)。denyAll()
我创建了示例项目here。