Geode / GemFire / PCC错误-未提供安全凭证

问题描述 投票:0回答:1

我在PCF上托管了一个springboot应用,试图连接到PCC(关键云缓存)。我启动了一个PCC实例,并将其绑定到我的应用程序,并将该应用程序推送到了Cloud Foundry。我已经将所有必需的gemfire启动器依赖项添加到springboot中,看来它能够从VCAP_SERVICES中读取定位器和服务器信息。但是,我在春季启动应用启动时看到以下错误。

Error prefilling connections : org.apache.geode.security.AuthenticationRequiredException: No security credentials are provided
org.apache.geode.security.AuthenticationRequiredException: No security credentials are provided
at org.apache.geode.internal.cache.tier.sockets.Handshake.readMessage(Handshake.java:320)


Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.geode.cache.Region]: Failed to create Region for cache [TestRegion]; nested exception is org.apache.geode.security.AuthenticationRequiredException: No security credentials are provided

这是我的依赖项列表

        <dependency>
            <groupId>org.springframework.geode</groupId>
            <artifactId>spring-gemfire-starter</artifactId>
            <version>1.2.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-gemfire</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.cache</groupId>
            <artifactId>cache-api</artifactId>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>io.pivotal.gemfire</groupId>
            <artifactId>geode-core</artifactId>
            <version>9.5.4</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.pivotal.gemfire</groupId>
            <artifactId>geode-common</artifactId>
            <version>9.5.4</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.pivotal.gemfire</groupId>
            <artifactId>geode-cq</artifactId>
            <version>9.5.4</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.pivotal.gemfire</groupId>
            <artifactId>geode-lucene</artifactId>
            <version>9.5.4</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.pivotal.gemfire</groupId>
            <artifactId>geode-wan</artifactId>
            <version>9.5.4</version>
            <scope>compile</scope>
        </dependency>
@Configuration
@ClientCacheApplication(name = "Test", logLevel = "info")
@EnableCachingDefinedRegions(
    clientRegionShortcut = ClientRegionShortcut.PROXY,
    serverRegionShortcut = RegionShortcut.REPLICATE_HEAP_LRU)
@EnableClusterAware
@EnablePdx
public class CloudConfiguration {}

我相信,我具有的Springboot gemfire启动器依赖项足以从VCAP_SERVICES自动读取安全性凭证,而无需任何手动操作。但是,我看到它没有得到认可,不确定在拥有以下所有依赖项之后为什么会这样做。有人可以帮忙吗?谢谢

pivotal-cloud-foundry gemfire geode spring-data-gemfire spring-boot-data-geode
1个回答
1
投票

确定...

首先,请参阅我的[[answer],有关您的应用程序依赖项的最后一个SO post。正确声明应用程序依赖性是我的回答的中心主题。

接下来,

Spring Data GemFire(SDG)本身在使用PCC时,将无法在PCF等托管环境中“自动”处理身份验证。为此,您绝对需要用于Apache Geode或Pivotal GemFire的Spring Boot

(SBDG),在您的情况下,则需要“ 。对于Pivotal GemFire”,从技术上讲,还需要org.springframework.geode:spring-gemfire-starter依赖项,这是您唯一需要的依赖项。确保按照我在先前的post中的指示对齐版本。基于上面的配置,由于您在@ClientCacheApplication类上显式声明了CloudConfiguration注释,因此您显式“

overrode

”客户端安全性配置和SBDG提供的自动配置。 >为什么?

再次,这是GemFire / Geode的事情,不是Spring的事情,但是必须正确配置和设置涉及GemFire / Geode(客户端/服务器,P2P,WAN等)的所有形式的“安全性”, [之前

缓存对象的构造和初始化。

如果已经由用户/应用程序配置提供了缓存对象,则将>将应用。请参阅here(以及here)。从技术上讲,这与GemFire / Geode“安全配置”几乎完全通过GemFire / Geode属性进行配置有关。这些属性必须在构造缓存之前声明/设置,因为它们会在启动时传递给缓存创建。如果未提供它们,则将应用安全性配置。以后是否在运行时提供安全属性都无关紧要,无论是否带有

Spring

(例如,直接使用GemFire / Geode API进行简单操作),结果都是相同的!

GemFire / Geode有一个非常特定的初始化顺序:Auth,TLS / SSL,内存管理,这就是这,这就是为什么精心设计了SBDG auto-configuration以确保正确的初始化顺序的原因跟随。

[另外,无论是否(明确地)使用SDG的配置注释,而不是使用JavaConfig在Spring上下文中声明显式bean,效果都是相同的,因为SDG配置注释是为您隐式声明那些bean,这导致“覆盖“ Spring Boot提供的自动配置,尤其是SBDG。

无论是否使用GemFire / Geode,这都相同。如果您显式声明一个SQLDataSourcebean,那么当您的应用程序类路径上具有嵌入式数据库(H2或HSQL)时,您将告诉Boot重写提供的DataSource

这个概念是“ 通过配置的约定”(只需声明对应用程序类路径的依赖关系,即可自动神奇地启用功能),但当您的应用程序需求与默认值和您必须显式声明一个特定类型的Bean定义,以便根据您的应用程序要求更改配置,这必然会禁用

Spring Boot

提供的auto-config,否则,您将感到模棱两可且/或配置冲突(即是哪个)。通常,

Spring Framework

甚至不允许这样做。

再次,删除@ClientCacheApplication@EnablePdx。您不需要SBDG。但是,是@ClientCacheApplication注释在这里引起您的问题。

总而言之,所有这些已在参考文档中进行了详细的详细解释:Chapter 5 - Auto-configurationChapter 6 - Declarative Configuration

[Chapter 7 - Externalized Configuration(在

附录

中带有configuration meta-data reference)。
    特别注意
  1. 第4章]中的Overriding Auto-configuration
  2. 希望这会有所帮助!
© www.soinside.com 2019 - 2024. All rights reserved.