本周 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 启动器以及一些额外的 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() 方法不会打印出密码。
  • 应用于密码字段的 @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 仪表盘 - 第 3 部分:Spring Boot Devtools 重新加载

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

Spring 社区,欢迎回来,

这是我们关于 Spring Tool Suite 中新的 Spring Boot 仪表盘系列的最后一部分。在最后一部分中,我们将深入探讨如何结合使用 Spring Boot Devtools 和启动仪表盘。同样,此功能是 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 仪表盘可以帮助您完成此操作。

只要您部署或重新启动(因此更新)Cloud Foundry 上具有类路径上的 Spring Boot Devtools 的 Spring Boot 应用程序(使用启动仪表盘),启动仪表盘就会自动为 CF 上的启动应用程序配置远程使用 devtools。这主要包括设置远程密钥 - 以允许远程 devtools 访问它。

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

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

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

在云中调试

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

您可以像调试本地应用程序一样调试在云运行时上运行的应用程序,包括设置断点、检查变量,甚至热交换代码。但是,由于(目前)引导开发工具的技术限制,调试模式下运行的应用程序无法使用自动重启功能。

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

结论

至此,关于 Spring Boot Dashboard 的博文系列结束,这是 Spring Tool Suite 自 3.7.1 版本发布以来的一个新功能。请告诉我们您使用此仪表板的体验。

SpringOne2GX 2015 回放:使用 Spring Cloud 的开发人员体验

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

录制于 SpringOne2GX 2015。

演讲者:Dave Syer 博士,Spencer Gibb

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

所以您决定采用云原生。您的公司构建和运行了许多微服务。它们以各种方式相互交互。您拥有测试、登台和生产环境,可能需要花费大量精力才能正确设置。单个开发人员如何在不影响其他开发人员使用共享环境的情况下处理其中一项服务?在本课程中,我们将探讨一系列开发选项,从在本地部署所有内容,到存根,再到允许开发人员在其 IDE 中运行其服务并在其本地机器上进行整个系统交互的本地开发解决方案!

Spring Boot 1.3.0.RC1 现已推出

发行版本 | Phil Webb | 2015 年 10 月 21 日 | ...

Spring Boot v1.3.0.RC1 现已从 Spring 里程碑存储库 中获得。此版本修复了 近 140 个问题 并合并了 53 个拉取请求!感谢所有做出贡献的人。

我们不打算进行长时间的候选版本阶段,因此请尝试 RC1 并告知我们您是否发现任何问题。

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

项目页面 | GitHub | 问题 | 文档

本周的 Spring(SpringOne2GX 回放/Pieter Humphrey 版本!)- 2015 年 10 月 21 日

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

欢迎来到 本周的 Spring 的另一期安装!本周是 非常棒的 [https://twitter.com/pieterhumphrey](Pieter Humphrey) 发布了大量 SpringOne2GX 2015 视频供我们狂欢观看的首周(很多周)!本周丰富的综述大多要归功于 Pieter 细致的转码、上传和发布 SpringOne2GX 2015 的视频 - 感谢 Pieter!因此,事不宜迟,让我们看看本周的一些精选内容,包括大量来自 SpringOne2GX 的内容,包括..

SpringOne2GX 2015 回放:Spring Cloud 入门

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

录制于 SpringOne2GX 2015。

演讲者: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 是一个云原生应用程序平台,使您能够在像 Docker 这样的容器中运行您的应用程序,或者通过 Vagrant 在您的本地机器上运行。Lattice 包括以下功能:集群调度 HTTP 负载均衡 日志聚合 健康管理 Lattice 通过打包 Cloud Foundry 弹性运行时中发现的一部分组件来实现此目的。结果是一个开放的、单租户的环境,适合快速…

SpringOne2GX 2015 回放:12 要素,或适用于 Spring 开发人员的云原生应用程序

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

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

获取 Spring 时事通讯

通过 Spring 时事通讯保持联系

订阅

领先一步

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

了解更多

获取支持

Tanzu Spring 在一个简单的订阅中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举行的活动

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

查看全部