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

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

欢迎来到又一期本周 Spring!本周我和 Pivotal 的其他团队成员都在旧金山的 JavaOne 2015 会议上。本周 Pivotal Spring 团队将全力出动,快来拜访我们吧!

本周有几场精彩的 SpringOne2GX 2015 录播视频以及一些很棒的社区内容,让我们开始吧!

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

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

上一节中,您通过 Spring Data REST 内置的事件处理程序和 Spring 框架的 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 中工作时,所有这些都会自动为您完成。

如果您将 Spring Boot 应用程序运行在远程运行时(如 Cloud Foundry)上,那么这个故事会更有趣。原则上,您也可以在这样的远程环境中为此使用 Spring Boot Devtools,但这需要一些额外的工作。好消息是,Spring Boot Dashboard 会在这方面帮助您。

一旦您在 Cloud Foundry 上部署或重新启动(从而更新)一个具有 Spring Boot Devtools 依赖的 Spring Boot 应用程序(使用 Boot Dashboard),Boot Dashboard 就会自动为 CF 上的 Boot 应用程序配置 Devtools 的远程使用。这主要包括设置一个远程密钥,以允许远程 Devtools 访问它。

一旦启用 Devtools 的 Boot 应用程序在 Cloud Foundry 上运行,您就可以轻松地为此启动 Boot Devtools 远程客户端应用程序。这个客户端应用程序在您的本地计算机上运行,并连接到 Cloud Foundry 上的远程应用程序。它会监视文件更改,将它们上传到 Cloud Foundry 上的应用程序,并触发 Cloud Foundry 上的应用程序重新启动。

由于远程客户端应用程序会监视您本地计算机上项目中的文件更改,因此您可以像往常一样在 IDE 中继续工作。更改后的文件将由远程客户端应用程序自动更新到 Cloud Foundry 上的应用程序版本。Cloud Foundry 上的对应端会在更改后的文件保存到 Cloud Foundry 上的应用程序后重新启动 Boot 应用程序。这适用于新编译的源代码以及更改的资源文件。

这使您即使在部署到远程云运行时,也能在处理项目时实现快速周转周期。

云端调试

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

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

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

结论

本系列博客到此结束,介绍了 Spring Tool Suite 自 3.7.1 版本以来的一项新功能——Spring Boot Dashboard。请告诉我们您使用该 Dashboard 的体验。

SpringOne2GX 2015 回放:Spring Cloud 的开发者体验

新闻 | Pieter Humphrey | 2015年10月22日 | ...

录制于 SpringOne2GX 2015。

演讲者:Dr. Dave Syer, Spencer Gibb

幻灯片:http://www.slideshare.net/SpringCentral/developer-experience-with-spring-cloud

您已经决定走向云原生。您拥有多个微服务供公司构建和运行。它们以各种方式相互交互。您拥有测试、预生产和生产环境,这些环境可能花费了大量的精力才得以完善。个体开发者如何在不干扰使用共享环境的其他开发者的前提下,仅在一个服务上工作?在本讲座中,我们将探讨一系列开发选项,从本地部署所有内容、使用存根(stubbing),到允许开发者在其 IDE 中运行其服务并使整个系统在本地计算机上交互的本地开发解决方案!

Spring Boot 1.3.0.RC1 现已可用

发布 | Phil Webb | 2015年10月21日 | ...

Spring Boot v1.3.0.RC1 现已可从 Spring milestone repository 获取。此版本解决了近 140 个问题,并合并了53 个拉取请求!感谢所有做出贡献的人。

我们不打算有漫长的候选发布阶段,所以请尝试 RC1,如果您发现任何问题,请告知我们。

有关更改的完整列表和升级说明,请参阅 wiki 上的 Spring Boot 1.3 发布说明以及更新的参考文档

项目主页 | GitHub | 问题列表 | 文档

本周 Spring 动态 (SpringOne2GX 重播 / Pieter Humphrey 版!) - 2015 年 10 月 21 日

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

欢迎收看又一期的《本周 Spring 动态》!本周是《本周 Spring 动态》的第一个(也是许多期中的之一),非常棒的 [https://twitter.com/pieterhumphrey](Pieter Humphrey) 发布了大量 SpringOne2GX 2015 的视频供我们尽情观看!本周丰富的集锦大部分归功于 Pieter 对 SpringOne2GX 2015 视频的细致转码、上传和发布——谢谢 Pieter!话不多说,让我们来看看本周的一些精选内容,包括大量来自 SpringOne2GX 的内容,例如...

  • ..Juergen Holler 和 Stephane Nicoll 的演讲,介绍 Spring framework 4.2 的更新
  • ..SpringOne2GX 第一天的头脑风暴 ,由 James Watters、Dr. David Syer、Scott Frederick、Juergen Hoeller 和本人主演
  • ..SpringOne2GX 第二天的头脑风暴 ,由 Guillaume LaForge、Graeme Rocher、Dr. David Syer、Mark Fisher、Scott Frederick 和本人主演
  • …由 Spring Boot 和 Spring Cloud 联合创始人 Dave Syer 博士和我,在 Spring 创始人兼英雄 Rod Johnson 博士极其慷慨的客串帮助下,发表的关于介绍 Spring Cloud 的演讲(我从未如此荣幸能够参与这次演讲,并且我真心

SpringOne2GX 2015 回放:Spring Cloud 入门

新闻 | Pieter Humphrey | 2015 年 10 月 19 日 | ...

录制于 SpringOne2GX 2015。

演讲者:Dr. Dave Syer, Josh Long

幻灯片:http://www.slideshare.net/SpringCentral/getting-started-with-spring-cloud

Spring Cloud 1.0 现已发布!它提供了一种创建和消费微服务的强大方法。随着新服务的引入,您也会带来集成问题:服务可能不稳定,它们可能会消失,并且由于它们通常通过 HTTP 公开,因此比进程内方法调用需要更多的努力。在本次网络研讨会中,我们将重点介绍 Spring Cloud 如何集成服务注册(例如 Eureka)、声明式 REST 客户端(使用 Netflix 的 Feign)、响应式编程和断路器模式(与 Hystrix),以支持轻松、健壮的服务到服务调用,以及使用 Spring Cloud Stream 进行消息传递微服务。这将深入探讨如何连接和消费微服务,是继 Spring Boot 构建微服务入门之后的自然延伸。

SpringOne2GX 2015 回放:Lattice:您的 Spring 应用程序的云原生平台

新闻 | Pieter Humphrey | 2015 年 10 月 19 日 | ...

录制于 SpringOne2GX 2015 演讲者:Matt Stine 幻灯片: http://www.slideshare.net/SpringCentral/lattice-a-cloud-native-platform-for-your-spring-applications Lattice 是一个云原生应用程序平台,可让您通过 Vagrant 在本地机器上运行 Docker 等容器中的应用程序。Lattice 包含以下功能:集群调度 HTTP 负载均衡日志聚合健康管理 Lattice 通过打包 Cloud Foundry 弹性运行时中的一部分组件来实现这一点。结果是一个开放的、单租户的环境,适用于快速…

SpringOne2GX 2015 回放:12 Factor,或 Spring 开发人员的云原生应用

新闻 | Pieter Humphrey | 2015 年 10 月 19 日 | ...

录制于 SpringOne2GX 2015 演讲者:Cornelia Davis 幻灯片: http://www.slideshare.net/SpringCentral/12-factor-cloud-native-apps-for-spring-developers 第三平台,其特点是流动的基础设施,虚拟机服务器不断出现和消失,工作负载不断移动、扩展和缩减以满足不断变化的需求,这需要新的设计模式、流程甚至文化。对这些新范例最著名的描述之一是 Twelve Factor App (12factor.net),它描述了云原生应用程序的要素。其中许多…

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获得支持

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

了解更多

即将举行的活动

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

查看所有