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

gyo*_*der 21 java spring-data spring-data-rest

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

这是我的问题:是否有一些方法可以将Spring Data REST配置为仅公开父项目中资源的休息端点,而不必显式注释依赖项目中的每个存储库@RepositoryRestResource(exported = false)

如果我只能通过@RepositoryRestResource禁用它来实现这一点,更糟糕的是,没有其他具有不同用例的项目将能够为这些存储库启用REST端点,我的依赖项目将不得不包括仅用于...的Spring Data REST.

Bri*_*ian 34

当我正在寻找这个特定的设置时,回到这里.看起来现在已经实现了.在这种情况下,您需要设置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
Run Code Online (Sandbox Code Playgroud)

参考:4.6.1.哪些存储库默认公开?

  • 确实,我相应地进行了更新。自我发布以来,URL 中的锚链接似乎已更改。 (2认同)
  • 我发现这种默认行为非常恶心:-/ ...这种设计的“安全漏洞”是什么? (2认同)

Oli*_*ohm 17

目前,没有全球开关可以满足您的需求.我已经为你提交了这张票,以便列入下一个主要版本.

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

  • 使repos包私有.谢谢你创造了这张票. (3认同)

小智 6

从 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();
    }
}
Run Code Online (Sandbox Code Playgroud)