java 如何禁用Spring Data REST存储库的默认暴露?

vbopmzt1  于 2023-09-29  发布在  Java
关注(0)|答案(3)|浏览(117)

我有一个使用spring-data-rest的项目,还有一个只使用Spring Data的依赖项目。这两个项目都有spring数据存储库,并使用@EnableJpaRepositories来实现它们的存储库接口,但我只想导出父项目中的存储库。
我的问题是是否有某种方法可以配置Spring Data REST以仅暴露父项目中资源的rest endpoints,而不必显式地使用@RepositoryRestResource(exported = false)注解依赖项目中的每个存储库?
如果我只能在禁用@RepositoryRestResource的情况下做到这一点,更糟糕的是,没有其他具有不同用例的项目能够为这些存储库启用REST端点,那么我的依赖项目将不得不包含Spring Data REST。

jm2pwxwz

jm2pwxwz1#

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

参考文献

p8ekf7hl

p8ekf7hl2#

当前没有您要查找的全局交换机。我已经为您提交了this ticket,以便包含在下一个主要版本中。
不确定这是否适合您,但除非显式注解,否则包私有存储库接口当前不会公开。如果您可以使所有这些库存储库都受到包保护,那么这可能比显式注解更有利。

wj8zmpe1

wj8zmpe13#

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

相关问题