原标题:Spring认证中国教育管理中心-ApacheGeode的SpringData教程14(Spring中国教育管理中心)6.15.Configureclusterconfigurationpush这可能是SpringDataforApacheGeode中最令人兴奋的新特性。当使用@EnableClusterConfiguration注释客户端应用程序类时,客户端应用程序在Spring容器中定义和声明为beans的任何区域或索引都将“推送”到客户端连接的服务器集群。不仅如此,这种“推送”的执行方式使得ApacheGeode记住客户端在使用HTTP时推送的配置。如果集群中的所有节点都发生故障,它们将以与以前相同的配置重新启动。如果将新服务器添加到集群,它将获得相同的配置。从某种意义上说,此功能与使用Gfsh在集群中的所有服务器上手动创建区域和索引没有太大区别。除了现在,使用SpringDataforApacheGeode,您不再需要使用Gfsh来创建区域和索引。借助SpringDataforApacheGeode的强大功能,您的SpringBoot应用程序已经包含为您创建区域和索引所需的所有配置元数据。当您使用SpringDataRepository抽象时,我们知道您的应用程序将需要区域的所有区域(例如,由@Region注释的实体类定义)和索引(例如,由注释的@Indexed实体字段和属性定义)和索引。当您使用Spring的缓存抽象时,我们还知道应用程序服务组件所需的缓存注释中标识的所有缓存的所有区域。本质上,您已经告诉我们我们需要知道的一切,只需使用Spring框架来开发您的应用程序,只需使用它的所有API和功能,无论是以注释元数据、Java、XML还是其他方式表示,无论是用于配置、映射还是任何目的。重点是,您可以在使用框架的功能和支持基础设施(例如Spring的缓存抽象、Spring数据存储库、Spring的事务管理等)的同时专注于应用程序的业务逻辑,而SpringDataforApacheGeode负责所有这些代表了这些框架功能所需的ApacheGeode管道。将配置从客户端推送到集群中的服务器并让集群记住它是通过使用ApacheGeode的集群配置服务部分实现的。ApacheGeode的集群配置服务也是Gfsh用于记录模式相关更改(例如)到由gfsh>createregion--name=Example--type=PARTITION用户从shell发出的集群的相同服务。当然,由于集群可能会“记住”客户端在上次运行时推送的先前配置,因此ApacheGeode的SpringData小心翼翼,不要践踏服务器中已经定义的任何现有区域和索引。这一点尤其重要,例如,当区域已经包含数据时!目前,没有覆盖任何现有区域或索引定义的选项。要重新创建一个Region或Index,您必须先使用Gfsh销毁Region或Index,然后重新启动客户端应用程序以将配置再次推送到服务器。或者,您可以使用Gfsh手动(重新)定义区域和索引。与Gfsh不同,SpringDataforApacheGeode仅支持从客户端在服务器上创建区域和索引。对于高级配置和用例,您应该使用Gfsh来管理(服务器端)集群。要使用此功能,您必须显式声明对org.springframework:spring-webSpring、ApacheGeodeClientCache应用程序类路径的依赖性。考虑以下配置中表达的功能:,一个以ApacheGeode作为缓存提供者的Spring缓存抽象(其中区域和索引不仅在客户端创建,而且还推送到集群中的服务器)。从那里,您只需执行以下操作:定义用映射和索引注释注释的应用程序域模型对象。定义一个Repository接口来支持基本的数据访问操作和对每个实体类型的简单查询。定义包含用于处理实体的业务逻辑的服务组件。在需要缓存、事务行为等的服务方法上声明适当的注释。在这种情况下,应用程序的后端服务(如ApacheGeode)所需的基础设施和管道没有任何内容。数据库用户具有类似的功能。现在Spring和ApacheGeode开发人员也在做同样的事情。当与以下用于ApacheGeode注释的SpringData结合使用时,此应用程序真正开始起飞非常轻松:6.16.配置SSL与序列化要通过网络传输的数据一样重要的是在传输过程中保护数据。当然,在Java中执行此操作的通常方法是使用安全套接字扩展(SSE)和传输层安全性(TLS)。要启用SSL,请使用@EnableSsl注释您的应用程序类,如下所示:ClientCacheSSL-EnabledSpringApplication@SpringBootApplication@ClientCacheApplication@EnableSslpublicclassClientApplication{..}然后您需要设置必要的SSL配置属性或属性:Keystore、username/密码等。您可以单独配置不同的ApacheGeode组件(GATEWAY、HTTP、JMX、LOCATOR和SERVER)以使用SSL,或者您可以使用CLUSTER枚举值将它们共同配置为使用SSL。您可以通过使用嵌套的@EnableSsl注释、具有枚举值的组件属性来指定SSL配置设置应应用的ApacheGeode组件组件,如下所示:={GATEWAY,LOCATOR,SERVER})publicclassClientApplication{..}此外,您可以通过使用相应的注释属性或关联的配置属性来指定组件级SSL配置(密码、协议和密钥库/信任库信息)。有关更多详细信息,请参阅@EnableSsl注释Javadoc。可以在此处找到有关ApacheGeode的SSL支持的更多详细信息。6.17.配置安全毫无疑问,应用程序安全非常重要,ApacheGeode的SpringData为保护ApacheGeode客户端和服务器提供了全面的支持。最近,ApacheGeode引入了一个新的集成安全框架(取代其旧的身份验证和授权安全模型)来处理身份验证和授权。这个新安全框架的主要特性和优势之一是它与ApacheShiro集成,因此可以将身份验证和授权请求委托给ApacheShiro以增强安全性。本节的其余部分演示了ApacheGeode的SpringData如何进一步简化ApacheGeode安全故事。6.17.1.配置服务器安全性您可以通过多种不同的方式为ApacheGeode集群中的服务器配置安全性。实现ApacheGeodeorg.apache.geode.security.SecurityManager接口并设置ApacheGeode的security-manager属性以使用完全限定的类名引用SecurityManager的应用程序实现。或者,用户可以构造和初始化其SecurityManager实现的实例,并在创建ApacheGeode对等体时使用CacheFactory.setSecurityManager(:SecurityManager)方法设置其缓存。shiro.ini使用为您的应用程序定义的用户、角色和权限创建一个ApacheShiro文件,然后设置ApacheGeodessecurity-shiro-init属性以引用此shiro.ini文件,该文件必须位于CLASSPATH中。仅使用ApacheShiro,使用SpringDataforApacheGeode的新@EnableSecurity注释来注释您的SpringBoot应用程序类,并将一个或多个ApacheShiro领域定义为Spring容器中的bean,以访问应用程序的安全元数据(即授权用户、角色和权限)).第一种方法的问题是您必须实现自己的SecurityManager,这既乏味又容易出错。实现自定义SecurityManager为从任何存储元数据的数据源(例如LDAP或什至专有的内部数据源)访问安全元数据提供了一些灵活性。然而,这个问题已经通过配置和使用ApacheShiroRealms解决了,它更广为人知并且非ApacheGeode特定。第二种方法,使用ApacheShiroINI文件,稍微好一些,但你仍然需要先熟悉INI文件格式。此外,INI文件是静态的,无法在运行时轻松更新。第三种方法是理想的,因为它遵循众所周知的和行业公认的概念(即ApacheShiro的安全框架)并且易于设置,如下例所示:SpringServerApplicationusingApacheShiro@SpringBootApplication@CacheServerApplication@EnableSecurityclassServerApplication{@BeanPropertiesRealmshiroRealm(){PropertiesRealmpropertiesRealm=newPropertiesRealm();propertiesRealm.setResourcePath("classpath:shiro.properties");propertiesRealm.setPermissionResolver(newGemFirePermissionResolver());returnpropertiesRealm;}}Spring认证中国教育管理中心-ApacheGeode的SpringData教程十四ActiveDirectoryJDBCJNDILDAPARealm支持INI格式。您甚至可以创建ApacheShiro、Realm的自定义实现。当ApacheShiroCLASSPATH在集群中的服务器上并且一个或多个ApacheShiroRealms已被定义为Spring容器中的beans时,ApacheGeode的SpringData检测到此配置并使用ApacheShiro作为安全提供程序来保护您的ApacheGeode服务器使用@EnableSecurity注解时。6.17.2.配置客户端安全如果不讨论如何保护基于Spring的ApacheGeode缓存客户端应用程序,任何安全故事都是不完整的。老实说,使用ApacheGeode保护客户端应用程序的过程相当复杂。简而言之,您需要:提供org.apache.geode.security.AuthInitialize接口的实现。设置ApacheGeodesecurity-client-auth-init(系统)属性以引用自定义的、应用程序提供的AuthInitialize接口。在专有的ApacheGeodegfsecurity.properties文件中指定用户凭据。SpringDataforApacheGeode通过使用在服务器应用程序中使用的相同@EnableSecurity注释简化了所有这些步骤。换句话说,相同的@EnableSecurity注释处理客户端和服务器应用程序的安全性。例如,当用户决定将其应用程序从嵌入式对等缓存应用程序切换到ClientCache时,此功能使用户更容易。只需将SDG注释从@PeerCacheApplication更改或将@CacheServerApplication更改为@ClientCacheApplication即可。实际上,您需要在客户端执行以下操作:SpringClientApplication@EnableSecurity@SpringBootApplication@ClientCacheApplication@EnableSecurityclassClientApplication{..}然后您可以定义熟悉的application.propertiesSpringBoot包含所需的用户名和密码文件,如如下例所示,你就完成了:application.propertiesSpringBootfilewithrequiredsecuritycredentialsspring.data.gemfire.security.username=jackBlackspring.data.gemfire.security.password=b@cK!nB1@cKdefaultcase接下来,application.properties当你的文件被放置在应用程序的CLASSPATH上时。当然,Spring通过使用其Resource抽象支持多种定位资源的方式。6.18.配置提示以下提示可以帮助您充分利用新的基于注释的配置模型:配置组织其他基于配置的注释6.18.1。配置组织正如我们在“配置集群配置推送”一节中看到的那样,当许多通过使用注释启用ApacheGeode或SpringDataforApacheGeode功能时,我们开始在Spring@Configuration或@SpringBootApplication类上堆叠大量注释.在这种情况下,开始对配置进行一些分区是有意义的。例如,考虑以下声明:ClientCache厨房水槽的弹簧应用@SpringBootApplication@ClientCacheApplication@EnableContinuousQueries@EnableCachingDefinedRegions@EnableEntityDefinedRegions@EnableIndexing@EnableGemfireCacheTransactions@EnableGemfireCaching@EnableGemfireFunctionExecutions@EnableGemfireRepositories@EnableClusterConfigurationclassClientApplication{..}我们可以按关注分解此配置,如下所示:ClientCacheSpringapplicationstartedusingthekitckensink@SpringBootApplication@Import({GemFireConfiguration.class,CachingConfiguration.class,FunctionsConfiguration.class,QueriesConfiguration.class,RepositoriesConfiguration.class})classClientApplication{..}@ClientCacheApplication@EnableClusterConfigurationf@EnableGGemFireConfiguration{..}@EnableGemfireCaching@EnableCachingDefinedRegionsclassCachingConfiguration{..}@EnableGemfireFunctionExecutionsclassFunctionsConfiguration{..}@EnableContinuousQueriesclassQueriesConfiguration{@ContinuousQuery(..)voidprocessCqEvent(CqEventevent){...}}@EnableEntityDefinedRegions@EnableGemfireRepositories@EnableIndexingclassRepositoriesConfiguration{..}性以便下一个必须维护代码的人(可能是你在未来的某个时候)
