如何禁用 Spring 数据 REST 存储库的默认公开?
How to disable the default exposure of Spring Data REST repositories?
我有一个使用 spring-data-rest 的项目,并且有一个仅使用 Spring Data 的依赖项目。两个项目都有 spring 个数据存储库,并使用 @EnableJpaRepositories
实现它们的存储库接口,但我只想导出父项目中的存储库。
我的问题是:有什么方法可以配置 Spring Data REST 只公开父项目中资源的其余端点,而不必使用 [=12= 显式注释依赖项项目中的每个存储库]?
如果我只能通过 @RepositoryRestResource
禁用它来做到这一点,更糟糕的是,没有其他具有不同用例的项目能够为这些存储库启用 REST 端点,我的依赖项项目将不得不包括 Spring 数据 REST 仅用于…
目前没有您要查找的全局开关。我已为您提交 this ticket 以包含在下一个主要版本中。
不确定它是否适合您,但除非明确注释,否则包私有存储库接口当前不会公开。如果您可以将所有这些库存储库打包保护,这可能比显式注释更有利。
在寻找此特定设置时循环回到此处。看起来现在已经实现了。在这种情况下,您需要设置 spring.data.rest.detection-strategy=annotated 以避免默认曝光。
所有 application.properties 个选项:
# Exposes all public repository interfaces but considers @(Repository)RestResource\u2019s `exported flag.
spring.data.rest.detection-strategy=default
# Exposes all repositories independently of type visibility and annotations.
spring.data.rest.detection-strategy=all
# Only repositories annotated with @(Repository)RestResource are exposed, unless their exported flag is set to false.
spring.data.rest.detection-strategy=annotated
# Only public repositories annotated are exposed.
spring.data.rest.detection-strategy=visibility
参考资料
从版本 3.4 开始使用:
import org.springframework.context.annotation.Configuration;
import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurer;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
@Configuration
public class SpringRestConfiguration implements RepositoryRestConfigurer {
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config, CorsRegistry cors) {
config.disableDefaultExposure();
}
}
我有一个使用 spring-data-rest 的项目,并且有一个仅使用 Spring Data 的依赖项目。两个项目都有 spring 个数据存储库,并使用 @EnableJpaRepositories
实现它们的存储库接口,但我只想导出父项目中的存储库。
我的问题是:有什么方法可以配置 Spring Data REST 只公开父项目中资源的其余端点,而不必使用 [=12= 显式注释依赖项项目中的每个存储库]?
如果我只能通过 @RepositoryRestResource
禁用它来做到这一点,更糟糕的是,没有其他具有不同用例的项目能够为这些存储库启用 REST 端点,我的依赖项项目将不得不包括 Spring 数据 REST 仅用于…
目前没有您要查找的全局开关。我已为您提交 this ticket 以包含在下一个主要版本中。
不确定它是否适合您,但除非明确注释,否则包私有存储库接口当前不会公开。如果您可以将所有这些库存储库打包保护,这可能比显式注释更有利。
在寻找此特定设置时循环回到此处。看起来现在已经实现了。在这种情况下,您需要设置 spring.data.rest.detection-strategy=annotated 以避免默认曝光。
所有 application.properties 个选项:
# Exposes all public repository interfaces but considers @(Repository)RestResource\u2019s `exported flag.
spring.data.rest.detection-strategy=default
# Exposes all repositories independently of type visibility and annotations.
spring.data.rest.detection-strategy=all
# Only repositories annotated with @(Repository)RestResource are exposed, unless their exported flag is set to false.
spring.data.rest.detection-strategy=annotated
# Only public repositories annotated are exposed.
spring.data.rest.detection-strategy=visibility
参考资料
从版本 3.4 开始使用:
import org.springframework.context.annotation.Configuration;
import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurer;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
@Configuration
public class SpringRestConfiguration implements RepositoryRestConfigurer {
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config, CorsRegistry cors) {
config.disableDefaultExposure();
}
}