本周 Spring 动态 - 2013 年 8 月 27 日

工程 | Josh Long | 2013年8月27日 | ...

欢迎回到本周 Spring 动态的又一期。照例,我们有很多内容要分享!Spring Security 和其负责人 Rob Winch 在本周的汇总中占据了重要位置!向 Rob Winch 致敬

  1. Spring Security 负责人 Rob Winch 发布了一篇博文,介绍 Spring Security 中一些新的、智能且便捷的跨站请求伪造(或称 CSRF)防护功能。
  2. Rob 还发布了另一篇精彩的博文,演示了 Spring Security 对安全标头的全新支持
  3. Rob 好心地将这些新功能集成到了 Spring REST 栈代码库中,您可以在其中看到它们在一个完整的、集成的 Spring REST 服务中的实际应用。要查看这些改动,以及集成了 Spring Security 和 Spring Security OAuth 的内容,所有这些都使用 Java 配置,请查看oauth 模块
  4. Reactor 负责人 Jonathan Brisbin 宣布Reactor 1.0.0.M2 现已发布。新版本看起来非常令人兴奋!从 Jon 的介绍中:“此第二个里程碑版本包含若干错误修复和一些非常令人兴奋的新功能。Reactor 现在包含一个 Processor 抽象,这是一个高度优化的任务处理器,基于LMAX Disruptor RingBuffer……在 MacBook Pro 上的初步基准测试显示,Processor 每秒可以处理大约 1 亿个事件。是的,您没看错:每秒 1 亿个!”
  5. Hyperic、Cloud Foundry、Spring 和 Spring Data 的专家 Jennifer Hickey 宣布Spring Data Redis 项目最新版本发布。新版本包括对密钥过期命令的毫秒精度支持、消息监听器在连接失败时的重新订阅、`RedisMap` 和 `RedisProperties` 中 `ConcurrentMap` 合约的完整实现。
  6. Spring Batch 负责人Michael Minella 宣布Spring Batch 3.0M1 已发布!此版本标志着实现JSR-352 Java Batch 规范等工作的第一步。
  7. 立即注册 8 月 29 日的网络研讨会:与 Param Rengaiah 一起参加“通过模块化模式和 Spring 驯服耦合与内聚的野兽”。
  8. 加入我们来自 Pivotal Labs 的朋友,David Frank 将于 9 月 5 日向您展示“如何通过 Pivotal Tracker 变得敏捷”。
  9. Spring Security 负责人 Rob Winch 在推特上说:“#Gradle 使其构建 #SpringSecurity 与 #SpringFramework 3 变得极其简单,并使用 #Spring 3/4 运行测试”,并链接到这个精彩的示例。严格来说,这不是 Spring 相关帖子,但对于像我们在 SpringSource 一样也使用 Gradle 的人来说,这是一个非常优雅的 Gradle 构建的绝佳示例。
  10. Spring Security 负责人 Rob Winch(这家伙真是无处不在!)也宣布了Spring Security LDAP 最新版本发布
  11. 我们的朋友 Xavier Padró 又回来了,这次带来了一篇博文,介绍了如何在收到消息时使用 Spring 的 JmsTemplate 进行资源本地 JMS 事务处理
  12. Patrick Grimard 发布了一篇精彩的博文,介绍了如何将Yeoman Backbone 与 Spring Web 应用程序集成,以及如何通过使用 Tuckey 的 UrlRewriteFilter 来绕过他遇到的一些资源解析问题。我喜欢 UrlRewriteFilter。即便如此,我认为(但尚未测试过……)Patrick 可以使用 Spring MVC 资源处理支持来完成同样的事情,就像他在代码中通过覆盖 public void addResourceHandlers(ResourceHandlerRegistry registry) 配置方法的一个示例中所做的那样。也许我错了,无论如何,这篇博文很棒!
  13. SpringSource 已在 Q3 计划中发布了新的培训课程,请查看以下培训课程计划:核心 Spring使用 Spring 进行企业集成Spring Web

Reactor 1.0.0.M2 – JVM 上响应式快速数据应用程序的基础

工程 | Jon Brisbin | 2013年8月27日 | ...

我很高兴地宣布 Reactor 的第二个里程碑版本,它正在朝着 1.0 版本迈进!Reactor 1.0.0.M2 的 Maven 工件可在常规的里程碑存储库中获取。

什么是 Reactor?

Reactor 是一个基础框架,用于在 JVM 上构建高吞吐量、异步、响应式应用程序。它提供 Selector 风格的事件路由主题匹配、动态 Consumer 分配、一个超快的任务处理器以及响应式 Stream 和 Promise API,用于异步处理数据和协调异步任务。它提供全面的 Groovy 语言支持,通过提供语言扩展,使得用 Groovy 编写 Reactor 应用程序非常 Groovy!它还具有易于使用的 Spring 支持,可以自动将带注解的 POJO 连接到 Reactors。

此版本包含哪些内容?

这个第二个里程碑版本包括了一些错误修复和一些真正令人兴奋的新功能。Reactor 现在包含了一个 Processor 抽象,这是一个基于 LMAX Disruptor RingBuffer 的高度优化任务处理器。它使用 Reactor 的通用抽象来配置 RingBuffer,并允许您使用 Reactor 的通用 API,而不是 Disruptor 特定的 API。它还通过设计跳过了 Reactor 提供的 Selector 匹配和动态 Consumer 分配,以榨取其所能达到的每一个吞吐量。在 MacBook Pro 上的传闻基准测试显示,Processor 每秒可以通过管道处理大约 1 亿个事件。是的,您没有看错:每秒 1 亿个!

1.0.0.M2 还在 Reactor API 中包含了一个虽小但重要的新功能,它优化了 Reactor 中的事件发布,以获得大约 30-50% 的更高吞吐量。它不适用于所有情况,因为它从 Reactor 中准备了一个优化的 Consumer 列表,但对于每秒额外的 1000 万个事件的吞吐量来说,这是一个很棒的新功能。

优化发布

Reactor 的强大之处之一是 Selector 匹配主题(ish)的发布/订阅。它允许您使用主题、匿名对象、可分配类型层次结构、URI 路径匹配或正则表达式(如果您实现自己的领域特定 Selector,则可以使用任何其他类型的 Selector 匹配)轻松地将处理程序分配给事件。但是许多应用程序可以在启动时分配其处理程序,这意味着到这些 Consumer 的路径可以针对高效的事件发布进行优化。新的 Reactor 方法 prepare(Object) 允许您预先选择一个键的 Consumer。它返回一个 Consumer 本身,事件发布者可以使用它来有效地通知新事件。

// Create Environment in which Reactors operate
Environment env = new Environment();
Reactor reactor = Reactors.reactor().env(env).get();

reactor.on($("say.hello"), new Consumer<Event<String>>() {
	public void accept(Event<String> ev) {
		System.out.println("Hello " + ev.getData() + "!");
	}
});

Consumer<Event<String>> sayHello = reactor.prepare("say.hello");
for(String name : listOfNames) {
	sayHello.accept(name);
}

RingBuffer 任务处理器

Reactor 1.0.0.M2 包含了 Processor 抽象。它是一个由 LMAX Disruptor RingBuffer 支持的简单任务处理器,旨在将其无缝集成到 Reactor 中使用的响应式 API 中,因此它使用 Supplier 和 Consumer 等通用抽象。一个完全配置的 Processor 可以在单个表达式中创建,使用 Java 8 lambda 更简洁。

Processor<Message> proc = new ProcessorSpec<Message>()
	.dataSupplier({ return new Message(); })
	.consume({ msg -> // handle the updated Message object…

Spring Batch 3.0 Milestone 1 发布

工程 | Michael Minella | 2013年8月23日 | ...

今天,我们很高兴地宣布 Spring Batch 3.0 的第一个里程碑版本发布(下载)。通过此次发布,我们朝着实现 JSR-352 Java Batch 规范迈出了第一步。Spring Batch 是一个轻量级、全面的框架,用于开发健壮的批处理应用程序。

JSR-352

JSR-352 被定位为 Java 平台的批处理标准化。作为该标准化的组成部分,此 JSR 包含了三个主要部分:

  • 用于配置作业的基于 XML 的 DSL
  • 用于创建作业相关组件(读取器/写入器等)的 API
  • 用于支持类和概念的 API 和行为描述

Spring 在为该规范做出贡献方面投入了大量的时间和资源。我们通过 JCP、JSR-352 与其他行业专家的合作,验证了 Spring Batch 在过去五年中在无数生产环境中实施和经受考验的批处理模式是构建关键任务批处理应用程序的最佳方法。

Milestone 1 中的特性

此版本是 Spring Batch 符合 JSR 的第一步。在 JSR-352 TCK 的 155 个 SE 测试中,此版本通过了 70 个。此版本中实现的特定功能包括:

  • JobOperator 实现
  • 通过 XML 进行基本的作业配置
  • batch.xml 支持

JobOperator

JSR 定义了一个 JobOperator 接口,它是 Spring Batch 的 JobOperatorJobExplorer 接口的组合。对于规范而言,此接口充当批处理应用程序与作业本身(启动/停止/重新启动等)以及作业存储库(例如,提供查询先前运行的 JobExecutions 的能力)交互的入口点。因此,JobOperator 需要提供现成的服务。JsrJobOperatorjavax.batch.operations.JobOperator 的 Spring 实现)引导一个 Spring 上下文,这与 @EnableBatchProcessing 类似。现成可用,它包含 JobRepositoryJobLauncherJobOperatorJobExplorerDataSourceTransactionManagerParametersConverterJobRegistryPlaceholderPropertiesConfigurer。所有这些都可以通过覆盖启动或重新启动作业时提供的上下文中的默认 bean 来在运行时覆盖。默认情况下,JobRepository 使用内存配置的 HSQLDB。

根据 JSR,启动作业实际上非常简单:

JobOperator jobOperator = BatchRuntime.getJobOperator();
JobExecution jobExecution = jobOperator.start("jsrJob", new Properties());

上述两行将引导先前定义的基线上下文(这仅发生一次),然后从 /META-INF 加载 batch.xml 文件(如果存在),并加载 /META-INF/batch-jobs 中 jsrJob.xml 定义的上下文。jsrJob.xml 可以是两种配置之一。它可以是标准的 Spring 上下文配置,将任何批处理工件定义为 Spring Bean,并通过 JSR-352 DSL 定义作业;或者它可以仅仅是 JSR 定义的作业定义。根据 JSR-352,jsrJob.xml 上下文中只能定义一个作业。JsrJobOperator 的其余功能几乎是直接包装现有的 JobOperatorJobExplorer 的功能(因此它们包含在基线应用程序上下文中)。

通过 XML 进行基本的作业配置

JSR-352 定义了一个基于 XML 的 DSL,任何 Spring Batch 用户都会立即感到熟悉。它由作业、步骤、读取器和写入器组成,Spring Batch 命名空间中的大部分概念都在 JSR-352 中得到了涵盖。在此版本中,开发人员将能够使用 JSR 定义的 DSL 配置基本作业。基本作业包括以下内容:

  • <job>
  • <step>
  • <chunk>
  • <batchlet>
  • <reader>
  • <processor>
  • <writer>
  • <decision>
  • <listeners>/<listener>
  • <properties>/<property>
  • <skippable-exception-classes> 及其子节点
  • <retryable-exception-classes> 及其子节点
  • <checkpoint-algorithm>
  • <next>/<end>//

使用 JSR,一个批处理作业通过 Spring Batch DSL 看起来是这样的:


<job id="data" xmlns="http://www.springframework.org/schema/batch">
    <step id="import" next="report">
        <tasklet>
            <chunk commit-interval="100"
                   reader="itemReader"
                   writer="dataWriter" />
        </tasklet>
    </step>
    <step id="report…

Spring Security 3.2.0.RC1 亮点:安全标头

工程 | Rob Winch | 2013年8月23日 | ...

更新

注意 本博文已不再维护。有关 Spring Security 的 Headers 的最新信息,请参阅 Headers 文档

原文

这是我关于 Spring Security 3.2.0.RC1 系列的第二篇博文。我的 上一篇博文 讨论了 Spring Security 的 CSRF 防护。在这篇文章中,我们将讨论如何使用 Spring Security 添加各种响应标头来帮助保护您的应用程序。

安全标头

Spring Security 3.2.0.RC1 中的许多新功能都是通过向响应添加标头来实现的。这些功能的基础是 Marten Deinum 的辛勤工作。如果这个名字听起来很熟悉,可能是因为他在 Spring 论坛上发布的 10K+ 帖子中的一个帮助过你。

如果您使用 XML 配置,可以使用 Spring Security 的 元素,不带任何子元素,来将所有默认标头添加到响应中。

<http ...>
    ...
    <headers />
</http>

如果您使用 Spring Security 的 Java 配置,默认会添加所有默认安全标头。可以使用下面的 Java 配置禁用它们:

```xml @EnableWebSecurity @Configuration public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override protected void configure(HttpSecurity http) throws Exception { http .headers().disable() ...; } }


<p>The remainder of this post will discuss each of the default headers in more detail:</p>
<ul>
<li><a href="#cache-control">Cache Control</a></li>
<li><a href="#content-type-options">Content Type Options</a></li>
<li><a href="#hsts">HTTP Strict Transport Security</a…

Spring Data Redis 1.1 RC1 发布

发布 | Jennifer Hickey | 2013年8月23日 | ...

亲爱的Spring社区,

我很高兴宣布Spring Data Redis 1.1的第一个发布候选版本!

下载 | JavaDocs | 参考文档 | 更新日志

亮点包括

  • 支持键过期命令的毫秒精度
  • 连接失败时消息监听器的重新订阅
  • RedisMap和RedisProperties中ConcurrentMap契约的完整实现

有关Spring Data Redis的更多信息,请参阅主页以获取实时示例和网络研讨会录音。

我们期待您在论坛问题跟踪器上提供反馈。我们希望在加利福尼亚州圣克拉拉举行的SpringOne大会上见到您。查看日程并注册!

Spring Framework 3.2 和 SpringSource EBR

新闻 | Pieter Humphrey | 2013年8月23日 | ...

从 3.2 版本开始,Spring Framework JAR 文件,如 spring-core、spring-context 和 spring-webmvc,不再包含带有 OSGi 元数据的 MANIFEST.MF 文件。同样,构建不会自动提升到 SpringSource EBR。为确保 OSGi 用户能够升级到 Spring Framework 3.2,SpringSource 将在 GA 版本发布后不久,以单独流程为 Spring Framework 3.2 GA 创建和发布 bundle 到 EBR。至少会发布一个 3.2 里程碑版或发布候选版,以便社区在 GA 发布前验证 OSGi 元数据。请注意,Spring Framework 3.1.x 系列的任何未来版本将继续包含 OSGi 元数据,并将按惯例立即发布到 EBR。感兴趣的用户可以关注 SPR-8903 以获取进一步更新的通知,例如 Spring Framework 3.2 bundle 发布到 EBR 时。

新加坡免费Spring - Hadoop会议

新闻 | Michael Isvy | 2013年8月22日 | ...

我们很高兴地宣布,我们将于8月30日星期五晚上6点至8点在新加坡市中心举办一场关于Spring和Hadoop的免费会议。

Spring最佳实践:从Spring Petclinic到Spring Data Hadoop

Michael Isvy于2008年加入SpringSource(Spring背后的公司,现为Pivotal的一部分)。自那时起,他已在10个不同国家教授Spring给1000多名学生。他曾在众多会议上就Spring发表演讲,并且是SpringSource博客上的活跃技术博主。Michael在SpringSource担任亚太地区教育经理…

Spring Security 3.2.0.RC1 亮点:CSRF 保护

工程 | Rob Winch | 2013 年 8 月 21 日 | ...

[callout title=更新]

此博客文章不再维护。请参阅CSRF 文档以获取有关 Spring Security 和 CSRF 保护的最新信息。

[/callout]

周一,我宣布了Spring Security 3.2.0.RC1 的发布。这是关于 Spring Security 3.2.0.RC1 新功能的两部分博客系列的第一部分。

在第一篇文章中,我将介绍 Spring Security 的 CSRF 支持。在下一篇文章中,我将介绍添加的各种安全标头。

CSRF 攻击

Spring Security 已增加对 跨站请求伪造 (CSRF) 攻击 的防护。太棒了,但什么是 CSRF 攻击,Spring Security 如何保护我免受其害?让我们通过一个具体的例子来更好地了解……

Spring Security 3.2.0.RC1 发布 (2013 年 8 月)

工程 | Rob Winch | 2013 年 8 月 19 日 | ...

Spring Security 3.2.0.RC1 现已可从 SpringSource 仓库获取,地址为 http://repo.springsource.org。请在此处 查看 通过 Maven 解析这些制品的操作教程。

此版本包含大量更新和修复。亮点包括:

  • Spring Security Java 配置的完善
  • 使用内容协商来确定在启用多个身份验证机制(例如 HTTP Basic 和 Form 登录)时,如何提示用户进行身份验证
  • AbstractSecurityWebApplicationInitializer 允许直接注册 Java 配置
  • 修复了若干 Bug
  • CSRF 防护以及与 Spring Web MVC jsp 标签的自动集成
  • 自动缓存控制支持
  • 防御 Clickjacking 攻击
  • HTTP Strict Transport Security 支持,以减少中间人攻击
  • 示例包含 pom.xml,因此可以作为 Maven 项目导入
  • MediaTypeRequestMatcher 用于在请求内容协商时进行匹配
  • 示例目录中集成了十多个 Java 配置示例
  • 三个新指南,引导用户通过示例并提供执行特定任务的详细说明。未来版本将发布更多此类指南
  • 有关此版本的更多详细信息,请参阅 Spring Security 3.2.0.RC1 预览

    SpringOne2GX

    要了解 Spring Security 3.2 中的所有新特性,请参加我于 2013 年 9 月 9 日至 12 日在 SpringOne2GX 举办的“Spring Security 3.2 入门”演示。如果您还没有购票,请尽快购买!

    变更日志 | 下载 | 参考手册 | 指南 | FAQ

    获取 Spring 新闻通讯

    通过 Spring 新闻通讯保持联系

    订阅