如何禁用Spring Data REST存储库的默认曝光?

时间:2015-02-04 20:22:06

标签: java spring-data spring-data-rest

我有一个使用spring-data-rest的项目,并且有一个只使用Spring Data的依赖项目。这两个项目都有spring数据库并使用@EnableJpaRepositories来实现它们的存储库接口,但我只想在父项目中导出存储库。

这是我的问题:是否有一些方法可以将Spring Data REST配置为仅显示父项目中资源的其余端点,而无需使用@RepositoryRestResource(exported = false)显式注释依赖项目中的每个存储库?

如果我只能通过@RepositoryRestResource禁用它来执行此操作,更糟糕的是,没有其他具有不同用例的项目将能够为这些存储库启用REST端点,我的依赖项目将必须包含Spring数据REST仅适用于......

3 个答案:

答案 0 :(得分:30)

回到这里,因为我正在寻找这个特定的设置。看起来现在已经实现了。在这种情况下,您需要设置 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

参考:4.6.1. Which repositories get exposed by defaults?

答案 1 :(得分:15)

目前还没有针对您所寻找的内容进行全局切换。我已将this ticket提交给您,以便纳入下一个主要版本。

不确定它是否适合您,但除非明确注释,否则包私有存储库接口当前不会公开。如果您可以使所有这些库存储库包受到保护,可能比显式注释更有利。

答案 2 :(得分:2)

从 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();
    }
}