当前位置:主页 > 建站知识 > APP开发 >

如何使用SpringSecurity的响应APP

发布时间:2021-05-16 14:35   浏览次数:次   作者:admin
Response是一种编程范式,我们在开发应用程序时会运用不同的思路。Response是开发web应用程序的一种功能强大的方法,并且得到了广泛的认可。在几年前,我甚至可以说它是非常流行的,当时任何重要的会议上至少都会有一些关于响应式应用的演讲。但与软件开发中的其他技术一样,响应性编程并不能代表一种适用于每一种情况的解决方案。
响应式方法在某些情况下是很合适的。另外一些情况下,这只会让你的生活更加复杂。然而响应式方法最终仍然存在,因为它解决了命令式编程的某些限制,因此可以用来避免它们。其中一个限制是,执行的大任务可能会被划分成几个部分。通过使用命令性方法,您为应用程序提供了一个要执行的任务,应用程序负责处理它。如果任务很大,那么应用程序可能会花很多时间来处理它。在收到响应之前,分配任务的客户端需要等待任务得到完全解决。使用响应式编程,可以划分任务,这样应用程序就有机会同时处理多个子任务。这样,客户机就能更快地接收处理过的数据。
在“使用SpringSecurity的响应式APP”系列中,我们将讨论如何在响应式应用程序中使用SpringSecurity来实现应用程序级安全。和任何其它应用程序一样,安全性也是响应式应用程序的重要方面。但因为响应式应用程序的设计不同,SpringSecurity就采用了我们在前一篇文章中所讨论的实现方法。
在这篇文章中,我们将简要介绍如何使用Spring框架实现响应应用。接下来,我们将应用您在前一篇文章中了解到的安全应用程序的安全特性。“SpringSecurity”(2)中,我们将讨论用户管理问题,“SpringSecurity”(3)中,我们将继续在“SpringSecurity”(3)中应用授权规则。在“使用SpringSecurity的响应APP”(4)中,您将了解如何在基于OAuth2设计的系统中实现响应应用程序。从SpringSecurity的角度来看,您将会看到响应式应用程序中有哪些变化,当然,您也会看到这些变化是如何通过示例应用的。
响应式应用程序是什么?
这篇文章将简要讨论响应式应用程序。这一系列的“使用SpringSecurity的响应APP”是关于对响应应用程序的安全性的,因此,通过本文,我想确保您在深入了解SpringSecurity配置之前,对响应应用程序有基本的了解。因为Response应用程序的主题很大,所以在本文中,我只将它的主要方面作为复习。若您还不知道响应式应用程序是如何工作的,或者您需要更详细地了解它们,我建议您阅读CregerWalls(Manning,2020)的《SpringinAction》第十章:
http://livebook.manning.com/book/spring-in-action-sixth-edition/chapter-10/
在实现响应式应用程序时,我们可以用两种方法实现这些功能。下列清单详细说明了这些方法:
通过命令法,你的应用程序可以同时处理大量的数据。举例来说,客户机应用程序调用服务器公开的端点,并向后端发送所有需要处理的数据。假定您实现了用户的文件上传功能。如果用户选择了一些文件,并且所有这些文件都已被后端应用程序接收并一次性处理,那么就需要使用命令方式。
您的应用程序使用响应式方法接收并处理片段数据。并非所有数据在处理一开始就必须完全可用。获取数据时后端接收并处理数据。假定用户选择了一些文件,需要在后台上传并进行处理。在进行处理前,后端不需要等待接收所有文件。后台可能会接收一个又一个文件,并在等待更多文件的同时处理每个文件。
这两种编程方法的对比如图1所示。设想一家工厂,生产牛奶瓶。假如一天早晨,所有的牛奶都收到了,而且装瓶后又被送到了工厂,那么我们就说这是无反应(急切)。假如一家工厂整天供应牛奶,一旦装瓶完毕,满足了定单数量,它就会发货,我们说这是回应。很明显,对牛奶厂而言,使用反应式方法要优于非反应式方法。
图片1
图1无响应的vs.reports。采用无反应法时,牛奶厂会在早晨把所有的牛奶包装好,晚上再把所有的盒子送出去。用反应式的方法,牛奶被送到工厂后,就被包装好,然后再送出去。对此,响应式方法更好,因为它允许一整天都收集牛奶,并能更快地将牛奶送到顾客手中。
响应式流程规范(http://www.reactive-streams.org/)为实现响应式应用程序提供了异步流程的标准方法。ProjectReactor是这个规范的实现之一,它为Spring的响应式编程模型建立了基础。项目Reactor提供了一个功能API来组成响应流。
要得到更多的实际经验,让我们先来看看响应式应用程序的简单实现。在“使用SpringSecurity(2)”继续讨论同样的应用程序时,我们将会讨论“响应式APP使用SpringSecurity”。我已经创建了一个新项目,我们将开发一个响应式web应用程序,展示演示端点。我们需要在pom.xml文件中添加响应式web依赖性,如下面的代码片段所示。
这个依存关系包含一个项目响应程序,它允许我们在项目中使用与之相关的类和接口:
springframework.bootspring-boot-starter-webflux。
下一步,我们定义一个简单的HelloController用来定义演示端点。HelloController类的定义如清单1所示。从端点的定义可以看出,我使用它作为返回类型Mono。Mono是Reactor实现定义的一个基本概念。在使用Reactor的时候,你通常会使用Mono和Flux,他们都是用来定义发布服务器(数据源)的。在响应流规范中,发布程序由发布程序接口描述。界面描述了一个用于响应流的基本界面。另外一个界面是用户界面。该界面描述使用数据的组件。
在设计端点返回内容时,端点将成为发布者,所以它必须返回发布者实现。在使用项目响应程序时,它将是Mono或Flux。Mono发布了一个单一值,而Flux发布了多个值。图2描述了这些组件及其相互关系。
图片2。
图2在响应流中,发布程序生成用于订阅程序的值。由响应流程规范定义的接口描述发布程序和订阅者。项目Reactor实现响应流规范,以及发布程序和订阅程序接口。对于图表,我们在本文的例子中使用的组件都是加阴影的。
为使这种解释更准确,让我们再来对比一下牛奶厂。奶制品厂是一种响应式后端实现,它公开一个接受处理牛奶的端点。这一端会产生某种东西(瓶装牛奶),因此它需要返回Publisher。若所需牛奶超过一瓶,则牛奶厂需要返回一个Flux,ProjectReactor的发布者实现,该实现处理产生的值为零或更多。
列表1定义了HelloController类。
@RestControllerpublicclassHelloController{@GetMapping("/hello"):publicMonohello()