在CrudRepository中限制创建操作,仅允许编辑操作

时间:2017-02-14 10:17:08

标签: java spring spring-boot spring-data

我使用Spring Boot spring-data-rest创建CrudRepository,并向用户公开其他端点。

但我想阻止用户创建新记录。 只允许用户更新现有记录。

如何实现? CrudRepository没有create方法,只有save delete ......

2 个答案:

答案 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中提供EDITsave。 但是spring-data-rest通过HTTP方法POST,PUT,PATCH来公开这两个操作。

POST用于CREATE,因此我们可以通过spring-security限制此方法:antMatchers(HttpMethod.POST,“/ ...”)。denyAll()

我创建了示例项目here