Spring Data Geode 1.0.0.INCUBATING-RELEASE 已釋出

工程 | John Blum | 2016 年 11 月 10 日 | ...

我謹代表SpringApache Geode社群,非常高興和激動地宣佈Spring Data for Apache Geode 1.0.0-incubating 已釋出。

您可以透過在Maven POM或Gradle構建檔案中新增以下依賴項,從Maven Central獲取這些庫...

Maven

<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-geode</artifactId>
  <version>1.0.0.INCUBATING-RELEASE</version>
</dependency>

Gradle

compile 'org.springframework.data:spring-data-geode:1.0.0.INCUBATING-RELEASE'

新增spring-data-geode依賴項後,它將自動引入所有必需的Apache Geode工件,因此您可以立即開始構建使用Apache GeodeSpring應用程式。

注意

我再次更改了版本限定符,去掉了APACHE-GEODE限定符,簡化為INCUBATING-RELEASE。一旦Apache Geode成功畢業,INCUBATING限定符也將被移除,版本號將簡單地變為major.minor.maint.[M#|RC#|RELEASE]

新功能

Spring Data Geode 1.0.0.INCUBATING-RELEASEApache Geode 1.0.0-incubating的釋出都具有重要意義,原因如下。

最重要的一點是,這是Apache Software Foundation (ASF) 內部的Apache Geode首次正式GA釋出。這不僅標誌著Geode的成熟,它源於十多年的生產經驗(曾是Pivotal GemFire),更是加速其在ASF內部成為頂級專案(TLP)的關鍵一步。

但,這還不是全部!

安全性!

此次釋出還包含了對Apache Geode安全模型的重要更新,引入了一個全新整合安全框架(一些技術細節在此),該框架不僅包括安全傳輸(如SSL),還支援身份驗證和授權。

這很重要,因為Apache Geode是少數幾個提供安全功能而無需企業許可的OSS IMDG(記憶體資料網格)選項之一!

這個新功能最棒的地方在於它是一個框架,允許插入不同的安全提供者。開箱即用,Geode構建在Apache Shiro之上,它提供了一種熟悉且強大的方式來配置Geode以及您的應用程式的安全。

如何保護Apache Geode

如果不使用Spring (Data Geode)Apache Geode會提供自己的安全配置選項。

一種方法是實現Apache GeodeSecurityManager介面,並將相應的Geode security-manager(系統)屬性設定為完全限定類名。這方面的一個例子可以在此處找到。

但是,使用屬性來引用FQCN會嚴重限制您在託管環境或測試上下文中配置SecurityManager的方式。根據我的反饋,這將在後續的Geode版本中得到解決

另一種方法是使用Apache Geodesecurity-shiro-init(系統)屬性來指定位於Apache Shiro支援的指定資源路徑中的INI配置檔案。然而,這存在兩個限制。

首先,Apache Geode目前僅支援classpath:資源說明符(Geode工程團隊也在解決這個問題)。其次,學習另一種配置檔案格式,無論它有多麼標準, IMO,都和XML一樣糟糕。

當然,Apache Shiro試圖透過提供這個來緩解在Spring上下文中執行時的痛苦。但是,仍然有太多冗餘的配置邏輯有待改進。

如何使用Spring (Data Geode) 保護Apache Geode

本著讓Apache Geode儘可能rong>快速和rong>易於使用的精神(請參閱我上一篇博文),我與Geode工程團隊密切合作,改進了最初的設計,並透過採用Spring FrameworkSpring Boot推廣的許多基本API和框架設計理念,真正使整合安全成為Spring Data Geode的一等公民。

因此,我為您帶來了SDG新註解驅動的配置模型中的@EnableSecurity註解。您可以透過多種方式使用該註解來配置Apache Geode的安全功能。

SecurityManager類名引用

您仍然可以透過其完全限定類名來引用Geode SecurityManager實現,使用...

package example;

class ExampleSecurityManager 
    implements org.apache.geode.security.SecurityManager {
  ...
}

@CacheServerApplication(name = "ClassNameExample")
@EnableSecurity(securityManagerClassName = "example.ExampleSecurityManager")
class ExampleApplication {
  ...
}

更詳細的示例可以在SDGContacts Application RI中此處找到。

但是,您必須提供一個預設的無參建構函式,並且您的Geode SecurityManager實現將負責在構造時載入所有安全身份驗證/授權詳細資訊;這並不理想。

SecurityManager代理實現

另一種選擇是建立一個實現Geode SecurityManager介面的Proxy,它委託給實際的、底層的Geode SecurityManager,該管理器在Spring容器或PivotalCloudFoundry等託管環境中配置並注入。

一個這樣的Proxy實現可以在RI此處找到,並按如下方式配置...

@CacheServerApplication(name = "ProxyExample")
@EnableSecurity(securityManagerClassName = 
  "example.app.geode.security.SecurityManagerProxy", 
  useBeanFactoryLocator = true)
class ExampleApplication {

    ...

    @Bean
    JdbcSecurityRepository securityRepository(JdbcTemplate template) {
      return new JdbcSecurityRepository(template);
    }

    @Bean
    SimpleSecurityManager securityManager(
        SecurityRepository<User> securityRepository) {

      return new SimpleSecurityManager(securityRepository);
    }
}

SecurityMangerProxyApache Geode在快取初始化期間構建。Spring容器將找到SimpleSecurityManager bean定義,並將其注入到SecurityManagerProxy中。

SecurityManagerProxy透過利用另一個Spring特性——BeanFactoryLocator——來工作,如參考指南(以及此處)中所述,用於配置和自動裝配在Spring容器外部構建和初始化的物件,例如由Apache Geode構建的物件。

這在應用程式物件(例如CacheLoader)在Geode的本地cache.xml配置中定義,並且需要與Spring容器中定義的bean(例如DataSource)進行自動裝配的情況下非常有用。這也適用於Geode(系統)屬性中引用的物件,例如SecurityManager

SecurityManagerProxy必須繼承LazyWiringDeclarableSupport類,這使得Proxy可以在Geode構建物件後,使用BeanFactoryLocatorSpring容器自動裝配。這確實非常巧妙。

您可以在RI此處看到完整的示例配置。這還需要在Geode Server、Spring Boot應用程式類上將useBeanFactoryLocator屬性設定為true,這在上面的示例中也有顯示

Apache Shiro INI配置檔案

也許您不想不必要地將應用程式程式碼與Geode的專有類和介面(如SecurityManager)耦合。也許您只是想充分利用Apache Shiro`s安全框架。

一種方法是建立一個Apache Shiro INI配置檔案,並在@EnableSecurity註解中像這樣引用它...

@CacheServerApplication(name = "ProxyExample")
@EnableSecurity(shiroIniResourcePath = "my-shiro.ini")
class ExampleApplication {
    ...
}

同樣,Apache Shiro INI檔案必須位於類路徑上。由於Apache Geode當前存在限制,因此無法使用其他資源說明符(例如file:url:)。

完整的示例配置可以在此處找到。

Apache Shiro Realm

然而,作為應用程式開發人員,您真正想要做的只是在Spring容器中將Apache Shiro Realm定義為Spring bean,以訪問您的應用程式安全Apache Geode所需的安全元資料,並讓Spring完成所有工作。

嗯,SDG也可以為您做到這一點。例如...

@CacheServerApplication(name = "RealmExample")
@EnableSecurity
class ExampleApplication {

    @Bean
    PropertiesRealm shiroRealm() {
      PropertiesRealm propertiesRealm = new PropertiesRealm();
      propertiesRealm.setResourcePath("classpath:shiro.properties");
      propertiesRealm.setPermissionResolver(new GeodePermissionResolver());
      return propertiesRealm;
    }
  }

就是這樣;您只需要這些。

請注意,Shiro PropertiesRealm使用GeodePermissionResolver來解析Geode許可權。此外,您可以選擇指定任何您選擇的資源路徑;您不限於僅使用classpath:

您還可以自由定義Shiro提供的任何Realm(例如JDBC、JNDI、LDAP等),您的應用程式使用這些Realm來訪問其安全元資料。

如果您定義了多個Shiro Realm,您甚至可以使用Spring@Order註解在Realm bean定義上對它們進行排序,如下所示...

@CacheServerApplication(name = "OrderedMultiRealmExample")
@EnableSecurity
class ExampleApplication {

    @Bean
    @Order(1)
    IniRealm iniRealm() {
      IniRealm iniRealm = new IniRealm("classpath:partial-shiro.ini");
      iniRealm.setPermissionResolver(new GeodePermissionResolver());
      return iniRealm;
    }

    @Bean
    @Order(2)
    PropertiesRealm propertiesRealm() {
      PropertiesRealm propertiesRealm = new PropertiesRealm();
      propertiesRealm.setResourcePath("classpath:partial-shiro.properties");
      propertiesRealm.setPermissionResolver(new GeodePermissionResolver());
      return propertiesRealm;
    }
}

Realm的排序是Apache Shiro 身份驗證序列中使用的身份驗證策略的一個重要因素。

您可以在RI此處看到使用Shiro Realm的多個示例配置。

下一步計劃

我們涵蓋了很多內容,但仍然有更多工作要做。具體來說,我打算做以下事情...

  • Apache Geode整合安全框架與Spring Security整合。
  • 改進Spring Boot對SDG Repositories的自動配置支援,並使用Spring快取抽象Apache Geode自動配置為快取提供者
  • 擴充套件SDG的註解配置支援,根據實體和/或Repository bean定義動態建立Geode快取Region

還有更多內容正在進行中,敬請期待。

其他釋出亮點

  • 將基礎Java版本設定為Java 8
  • 升級到Spring Framework 4.3.4.RELEASE。
  • 升級到Spring Data Commons 1.12.5.RELEASE。

請參閱更改日誌以獲取更多詳細資訊。

結論

一如既往,我們非常歡迎您的反饋,您可以透過JIRAStackOverflow與我們聯絡。

謝謝大家!編碼愉快。

獲取 Spring 新聞通訊

透過 Spring 新聞通訊保持聯絡

訂閱

領先一步

VMware 提供培訓和認證,助您加速進步。

瞭解更多

獲得支援

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案,只需一份簡單的訂閱。

瞭解更多

即將舉行的活動

檢視 Spring 社群所有即將舉行的活動。

檢視所有