本周 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 服务的上下文中看到它们的作用。要查看这些更改,以及使用 Java 配置集成的 Spring Security 和 Spring Security OAuth,请查看oauth 模块
  4. Reactor 首席工程师 Jonathan Brisbin 宣布Reactor 1.0.0.M2 现已可用。新版本看起来非常令人兴奋!摘自 Jon 的文章:“这个第二个里程碑版本包含许多错误修复和一些真正令人兴奋的新功能。Reactor 现在包含一个 Processor 抽象,这是一个基于LMAX Disruptor 环形缓冲区的高度优化的任务处理器……在 MacBook Pro 上进行的轶事基准测试显示,Processor 每秒可以处理大约 1 亿个事件。是的,你没看错:**每秒 1 亿个**!”
  5. Hyperic、Cloud Foundry、Spring 和 Spring Data 技术专家 Jennifer Hickey 宣布了Spring Data Redis 项目的最新版本。新版本包括对密钥过期命令中毫秒精度的支持、连接失败时消息侦听器的重新订阅、RedisMapRedisPropertiesConcurrentMap 合同的完整实现。
  6. Spring Batch 首席工程师Michael Minella 宣布Spring Batch 3.0M1 已发布!此版本标志着实施JSR-352 Java 批处理规范的第一步,除此之外还有其他内容。
  7. 立即注册 8 月 29 日的网络研讨会:使用模块化模式和 Spring 驯服耦合和内聚的野兽,主讲人:Param Rengaiah。
  8. 加入我们来自 Pivotal Labs 的朋友们,David Frank 将向您展示如何使用 Pivotal Tracker 实现敏捷开发,时间为 9 月 5 日。
  9. Spring Security 首席工程师 Rob Winch在推特上写道,“#Gradle 使得使用 #SpringFramework 3 构建 #SpringSecurity 并使用 #Spring 3/4 运行测试变得非常简单,”并链接到这个精彩的示例。这严格来说并非与 Spring 相关的博文,但对于那些也使用 Gradle(就像我们在 SpringSource 一样)的人来说,这是一个非常优雅的 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 已将新的培训课程添加到第三季度的日程中,请查看以下培训课程的日程安排:核心 Spring使用 Spring 进行企业集成Spring Web

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

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

我很高兴地宣布在通往 1.0 的道路上发布 Reactor 的第二个里程碑版本Reactor!Reactor 1.0.0.M2 的 Maven 工件可在通常的里程碑存储库中找到。

什么是 Reactor?

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

此版本包含哪些内容?

这个第二个里程碑版本包含许多错误修复和一些真正令人兴奋的新功能。Reactor 现在包含一个 Processor 抽象,这是一个基于LMAX Disruptor 环形缓冲区的经过高度优化的任务处理器。它使用 Reactor 的通用抽象来配置环形缓冲区,并允许您使用 Reactor 的通用 API 而不是特定于 Disruptor 的 API。它还在设计上跳过了 Reactor 提供的选择器匹配和动态消费者分配,以便能够榨取其全部吞吐量。在 MacBook Pro 上进行的轶事基准测试显示,Processor 每秒可以处理大约 1 亿个事件。是的,你没看错:每秒 1 亿个!

1.0.0.M2 还包含 Reactor API 中一个虽小但却非常重要的新功能,该功能优化了 Reactor 中的事件发布,从而提高了约 30-50% 的吞吐量。它并不适用于所有情况,因为它会从 Reactor 中准备一个优化的消费者列表,但为了额外提高每秒 1000 万个事件的吞吐量,这是一个非常棒的新功能。

优化的发布

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

// 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);
}

环形缓冲区任务处理器

Reactor 1.0.0.M2 包含 Processor 抽象。它是一个由LMAX Disruptor 环形缓冲区支持的简单任务处理器,旨在将其无缝集成到 Reactor 中使用的响应式 API 中,因此它使用供应商和消费者等通用抽象。可以使用单个表达式创建完全配置的处理器,并且使用 Java 8 lambda 表达式会更加简洁。

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

Spring Batch 3.0 里程碑 1 版本发布

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

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

JSR-352

JSR-352 被认为是 Java 平台批处理的标准化。作为标准化的一部分,此 JSR 包含三个主要部分

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

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

里程碑 1 中的功能

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

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

JobOperator

JSR 定义了一个JobOperator接口,它是 Spring Batch 的JobOperatorJobExplorer接口的组合。对于规范,此接口用作批处理应用程序与作业本身(启动/停止/重新启动等)以及作业存储库(例如,提供查询以前运行的 JobExecution 的能力)交互的入口点。因此,JobOperator需要提供一定程度的开箱即用服务。JsrJobOperatorjavax.batch.operations.JobOperator的 Spring 实现)引导类似于@EnableBatchProcessing的 Spring 上下文。它开箱即用地包含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 Bean 和通过 JSR-352 DSL 定义作业的标准 Spring 上下文配置,或者它可以只是 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>/<stop>/<fail>

使用 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 标头的最新信息。

原文

这是我关于 Spring Security 3.2.0.RC1 的两部分系列文章的最后一篇文章。我的上一篇文章讨论了 Spring Security 的 CSRF 保护。在这篇文章中,我们将讨论如何使用 Spring Security 向响应添加各种标头以帮助保护您的应用程序。

安全标头

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

如果您使用的是 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 的第一个候选版本!

下载 | JavaDoc | 参考文档 | 变更日志

亮点包括:

  • 支持密钥过期命令的毫秒精度
  • 连接失败时重新订阅消息侦听器
  • 在 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 创建和发布捆绑包到 EBR。还将发布至少一个 3.2 里程碑或候选版本,以便社区可以在发布 GA 之前验证 OSGi 元数据。请注意,Spring Framework 3.1.x 系列中的任何未来版本都将继续包含 OSGi 元数据,并将像往常一样立即发布到 EBR。感兴趣的用户可能需要关注SPR-8903以获取进一步更新的通知,例如 Spring Framework 3.2 捆绑包何时发布到 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 个不同国家的 1000 多名学生教授了 Spring。他在许多会议上介绍了 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 和表单登录)时提示用户进行身份验证
  • AbstractSecurityWebApplicationInitializer 允许直接注册 Java 配置
  • 修复了若干错误
  • CSRF 保护以及与 Spring Web MVC jsp 标签的自动集成
  • 自动缓存控制支持
  • 针对点击劫持攻击的防御
  • HTTP 严格传输安全 支持,以减少中间人攻击
  • 示例包含 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 入门演示。如果您尚未获得门票,请立即获得,以免错过!

    变更日志 | 下载 | 参考手册 | 指南 | 常见问题

    获取 Spring 新闻通讯

    通过 Spring 新闻通讯保持联系

    订阅