本周 Spring (PCF 1.6 版本!) - 2015 年 11 月 3 日

工程 | Josh Long | 2015 年 11 月 3 日 | ...

欢迎来到最新一期的 本周 Spring!本周我在保加利亚索非亚参加我最喜欢的活动之一,盛大的 Java2Days 大会

上周发布了 (终于!) Pivotal Cloud Foundry 1.6,其中包含了一年半以上备受期待的功能和大量繁重工作。新版本包含,在 众多其他内容 中,对平台托管的 GitLab、JFrog Artifactory 和 CloudBees Jenkins CI 的支持;对微服务基础设施的支持,包括 Spring Cloud Config Server 和 Spring Cloud Eureka;以及对 Docker 容器镜像和 .NET 应用的支持;以及支持在 Microsoft Azure 上运行。这个版本 包含了 各种优化功能,用于持续安全地将软件交付到生产环境,而且我…

Spring XD 1.3 RC1 发布

发布 | Mark Pollack | 2015 年 11 月 3 日 | ...

我代表 Spring XD 团队,很高兴地宣布 Spring XD 1.3 的第一个候选版本现已可供下载。您也可以使用 brewrpm 进行安装。

此版本包含一些针对批处理作业的重大新功能。我们引入了创建复合作业的能力,允许您根据新的 Job DSL 创建一个复杂的作业执行图。 Flo for Spring XD UI 已更新以支持新的 Job DSL,并提供一个可视化拖放画布来创建复合作业。Spring XD 的作业执行 UI 也支持复合作业的执行历史…

Spring Security 3.2.9 发布

发布 | Rob Winch | 2015 年 11 月 2 日 | ...

我很高兴宣布 Spring Security 3.2.9.RELEASE 已发布。此版本提供了错误修复和小的增强功能。有关此版本的完整详细信息,请参阅更改日志

此版本的亮点包括

  • SEC-2190 - 修复了当 Spring Security 在子 ApplicationContext 中注册时与 JSP 标签库的集成问题
  • SEC-2521 - 移除了 StandardPasswordEncoder 中的 synchronized,显著提高了性能
  • SEC-3108 - 修复了 DigestAuthenticationFilter 中潜在的竞争条件
  • SEC-3109 - DelegatingSecurityContextExecutor 可与 Concurrent/ThreadPoolTaskScheduler 一起工作

Spring Security 4.0.3 发布

发布 | Rob Winch | 2015 年 11 月 2 日 | ...

我很高兴宣布 Spring Security 4.0.3.RELEASE 已发布。此版本提供了错误修复和小的增强功能。有关此版本的完整详细信息,请参阅更改日志

此版本的亮点包括

  • SEC-3063 - 修复了 Spring Boot 1.3 的问题
  • SEC-2190 - 修复了当 Spring Security 在子 ApplicationContext 中注册时与 JSP 标签库的集成问题
  • SEC-2521 - 移除了 StandardPasswordEncoder 中的 synchronized,显著提高了性能
  • SEC-3108 - 修复了 DigestAuthenticationFilter 中潜在的竞争条件
  • SEC-3109 - DelegatingSecurityContextExecutor 可与 Concurrent/ThreadPoolTaskScheduler 一起工作

Spring IO Platform 2.0.0.RC1

发布 | Andy Wilkinson | 2015 年 10 月 29 日 | ...

Spring IO Platform 2.0.0.RC1 现已在Spring 里程碑仓库中提供。2.0 版本升级了许多组件的版本,包括 Spring Boot 1.3 和 Spring Framework 4.2。

请注意,此版本中已移除或替换了先前作为 Platform 一部分的许多依赖项。有关更多详细信息,请参阅文档

如果一切顺利,2.0.0.RELEASE 将在 Spring Boot 1.3.0.RELEASE 可用几周后发布。请试用 RC1,如果您发现任何问题,请告知我们。

项目主页 | GitHub | 问题 |

本周 Spring (JavaOne 2015 版本) - 2015 年 10 月 27 日

工程 | Josh Long | 2015 年 10 月 28 日 | ...

欢迎来到最新一期的 本周 Spring!本周我和 Pivotal 团队的其他成员一起在旧金山参加 JavaOne 2015。本周 Pivotal Spring 团队全员出动,欢迎前来打招呼!

本周在线有一些很棒的 SpringOne2GX 2015 录像以及一些很棒的社区内容,让我们开始吧!

React.js 和 Spring Data REST: 第 5 部分 - 安全

工程 | Greg L. Turnquist | 2015 年 10 月 28 日 | ...
要查看此代码的更新,请访问我们的React.js 和 Spring Data REST 教程

上一节中,您使应用程序通过 Spring Data REST 内置的事件处理器和 Spring Framework 的 WebSocket 支持动态响应来自其他用户的更新。但是,任何应用程序都需要对整个系统进行安全控制,以确保只有适当的用户才能访问 UI 和其背后的资源。

您可以随意从该仓库获取代码并跟随操作。本节基于上一节的应用程序并添加了额外内容。

向项目添加 Spring Security

在开始之前,您需要向项目的 pom.xml 文件添加几个依赖项

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-springsecurity4</artifactId>
</dependency>

这将引入 Spring Boot 的 Spring Security starter 以及一些额外的 Thymeleaf 标签,用于在网页中进行安全查找。

定义安全模型

在上一节中,您使用了一个不错的薪资系统。在后端声明事物并让 Spring Data REST 完成繁重的工作非常方便。下一步是建模一个需要建立安全控制的系统。

如果这是一个薪资系统,那么只有经理才能访问它。因此,首先建模一个 Manager 对象

@Data
@ToString(exclude = "password")
@Entity
public class Manager {
public static final PasswordEncoder PASSWORD_ENCODER = new BCryptPasswordEncoder();

private @Id @GeneratedValue Long id;

private String name;

private @JsonIgnore String password;

private String[] roles;

public void setPassword(String password) {
	this.password = PASSWORD_ENCODER.encode(password);
}

protected Manager() {}

public Manager(String name, String password, String... roles) {

	this.name = name;
	this.setPassword(password);
	this.roles = roles;
}

}

  • PASSWORD_ENCODER 是加密新密码或接收密码输入并在比较之前对其进行加密的手段。
  • idnamepasswordroles 定义了限制访问所需的参数。
  • 自定义的 setPassword() 确保密码永远不会以明文形式存储。

在设计安全层时,需要记住一个关键点。保护正确的数据位(如密码),绝不允许它们打印到控制台、日志中或通过 JSON 序列化导出。

  • @ToString(exclude = "password") 确保 Lombok 生成的 toString() 方法不会打印密码。
  • 应用于 password 字段的 @JsonIgnore 可防止 Jackson 序列化此字段。

创建经理仓库

Spring Data 非常擅长管理实体。为什么不创建一个仓库来处理这些经理呢?

@RepositoryRestResource(exported = false)
public interface ManagerRepository extends Repository<Manager, Long> {
Manager save(Manager manager);

Manager findByName(String name);

}

您不需要继承常用的 CrudRepository,因为它提供了很多方法。相反,您需要保存数据(也用于更新)并查找现有用户。因此,您可以使用 Spring Data Common 的最小 Repository 标记接口。它没有预定义的操作。

默认情况下,Spring Data REST 将导出它找到的任何仓库。您不希望此仓库暴露用于 REST 操作!应用 @RepositoryRestResource(exported = false) 注解以阻止其导出。这可以防止仓库及其任何元数据被提供。

将员工与他们的经理关联

安全建模的最后一部分是将员工与经理关联。在此领域中,一个员工可以有一个经理,而一个经理可以有多个员工

@Data
@Entity
public class Employee {
private @Id @GeneratedValue Long id…

Spring Integration 维护版本可用

发布 | Gary Russell | 2015 年 10 月 27 日 | ...

我们很高兴地宣布以下发布版本现已可用。这些版本包含重要的错误修复,用户应尽快升级。点击版本查看相应的 JIRA 发布说明。

4.2.1.RELEASE 4.1.7.RELEASE 4.0.8.RELEASE 3.0.8.RELEASE

请注意,除非出现令人信服的原因,否则预计 4.1.7 和 4.0.8 版本将是这些系列中的最后一个;鼓励 4.x 用户升级到 4.2.1,它是 4.x 系列的当前版本。

我们期望继续提供更多的 3.0.x 版本来解决…

STS 中的 Spring Boot Dashboard - 第 3 部分: Spring Boot Devtools 重载

工程 | Martin Lippert | 2015 年 10 月 22 日 | ...

欢迎回来,Spring 社区,

这是我们关于 Spring Tool Suite 中新的 Spring Boot Dashboard 系列的最后一部分。在最后一部分中,我们将深入探讨如何结合使用 Spring Boot Devtools 和 boot dashboard。同样,此功能是 Spring Boot 1.3 新增的,因此您需要使用该版本才能使用以下功能。

快速部署代码更改

对于本地应用程序,使用 Spring Boot Devtools 非常简单直接。一旦您将 Spring Boot Devtools 添加到您的项目作为依赖项(在上下文菜单的 Spring 分类中有一个简单的菜单选项),并启动您的应用程序,它将监听对配置和类文件的本地更改,并自动为您触发应用程序重启。您甚至无需自己重启应用程序,Spring Boot Devtools 会自动为您完成。由于 STS/Eclipse 在您保存文件时会生成并更新类文件,因此在 STS 中工作时所有这些都会自动发生。

如果您在远程运行时(如 Cloud Foundry)上运行 Spring Boot 应用程序,这个故事会变得更有趣。原则上,您也可以在这样的远程设置中使用 Spring Boot Devtools,但这需要更多工作。好消息是 Spring Boot Dashboard 可以帮助您完成这项工作。

一旦您在 Cloud Foundry 上部署或重启(从而更新)了 classpath 中包含 Spring Boot Devtools 的 Spring Boot 应用程序(使用 boot dashboard),boot dashboard 将自动为远程使用 devtools 配置 Cloud Foundry 上的 boot 应用程序。这主要包括设置一个远程密钥 - 以允许远程 devtools 访问它。

一旦启用了 devtools 的 boot 应用程序在 Cloud Foundry 上运行,您可以轻松地为其启动 boot devtools 远程客户端应用程序。该客户端应用程序在您的本地机器上运行,并连接到 Cloud Foundry 上的远程应用程序。它会监视文件更改,将它们上传到 Cloud Foundry 上的应用程序,并触发 Cloud Foundry 上的应用程序重启。

由于远程客户端应用程序会监视您本地机器上项目内的文件更改,您可以像往常一样继续在 IDE 中工作。更改的文件由远程客户端应用程序自动更新到 Cloud Foundry 版本的应用程序。Cloud Foundry 上的对应部分一旦将这些更改的文件存储到应用程序中,就会重启 boot 应用程序。这适用于新编译的源代码以及更改的资源文件。

即使您的项目部署在远程云运行时上,这也可以让您在项目开发中实现快速的周转周期。

在云中调试

除了自动重启功能外,Spring Boot Devtools 还支持对云运行时上的远程应用程序进行完整的调试。Spring Boot Dashboard 在 STS 中也支持此功能。如果您的应用程序的 classpath 中包含 Spring Boot Devtools,您可以按下 Cloud Foundry 应用程序实例的(重新)调试按钮。这将在调试模式下重启 Cloud Foundry 上的应用程序,自动启动您机器上相应的远程客户端应用程序,并将 Eclipse 调试器连接到它。

您可以像调试本地应用程序一样调试在云运行时上运行的应用程序,包括设置断点、检查变量,甚至热插拔代码。但是,自动重启功能不适用于在调试模式下运行的应用程序(目前由于 boot devtools 的技术限制)。

如果您尝试在 Cloud Foundry 上远程调试应用程序,您会注意到调试速度显著变慢。这是由于 JVM 的远程调试协议通过 HTTP 连接进行隧道传输造成的,远程调试协议并非为此设计。我们正在努力通过使用不同的传输机制来改善这一点。但在 Cloud Foundry 上远程调试应用程序应该是您很少做的事情。对于更频繁的调试,您可能需要考虑在本地运行和调试应用程序,并通过我们在本系列博客的上一部分中描述的 ngrok 隧道功能将其连接到您的其他应用程序服务。

结论

这结束了关于 Spring Boot Dashboard 的博客系列,这是 Spring Tool Suite 3.7.1 版本中的一项新功能。请告诉我们您使用 dashboard 的体验。

获取 Spring 通讯

订阅 Spring 通讯,保持联系

订阅

取得领先

VMware 提供培训和认证,助力您的进步。

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一次简单订阅。

了解更多

即将举办的活动

查看 Spring 社区所有即将举办的活动。

查看全部